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 java.io.File; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.OutputStream; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URL; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.ArrayList; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.List; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Iterator; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Properties; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.sound.sampled.spi.AudioFileReader; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.sound.sampled.spi.AudioFileWriter; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.sound.sampled.spi.FormatConversionProvider; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.sound.sampled.spi.MixerProvider; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.sound.utils.ProviderService; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.sound.internal.nls.Messages; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class AudioSystem { 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final int NOT_SPECIFIED = -1; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final static String audioFileReaderPath = "META-INF/services/javax.sound.sampled.spi.AudioFileReader"; //$NON-NLS-1$ 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final static String audioFileWriterPath = "META-INF/services/javax.sound.sampled.spi.AudioFileWriter"; //$NON-NLS-1$ 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final static String formatConversionProviderPath = "META-INF/services/javax.sound.sampled.spi.FormatConversionProvider"; //$NON-NLS-1$ 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final static String mixerProviderPath = "META-INF/services/javax.sound.sampled.spi.MixerProvider"; //$NON-NLS-1$ 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final static String CLIP = "javax.sound.sampled.Clip"; //$NON-NLS-1$ 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final static String PORT = "javax.sound.sampled.Port"; //$NON-NLS-1$ 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final static String SOURCEDATALINE = "javax.sound.sampled.SourceDataLine"; //$NON-NLS-1$ 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final static String TARGETDATALINE = "javax.sound.sampled.TargetDataLine"; //$NON-NLS-1$ 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static Mixer.Info[] getMixerInfo() { 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<Mixer.Info> result = new ArrayList<Mixer.Info>(); 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mixerProviderPath).iterator(); providers.hasNext();) { 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info[] infos = ((MixerProvider) (providers.next())) 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getMixerInfo(); 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Mixer.Info info : infos) { 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.add(info); 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info[] temp = new Mixer.Info[result.size()]; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result.toArray(temp); 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static Mixer getMixer(Mixer.Info info) { 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info[] infos; 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info inf; 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (info == null) { 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project infos = getMixerInfo(); 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (infos == null) { 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException( 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "No system default mixer installed"); //$NON-NLS-1$ 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project inf = infos[0]; 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project inf = info; 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mixerProviderPath).iterator(); providers.hasNext();) { 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((MixerProvider) (providers.next())).getMixer(inf); 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} catch (IllegalArgumentException e) {} 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException("Mixer not supported: " + inf); //$NON-NLS-1$ 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static Line.Info[] getSourceLineInfo(Line.Info info) { 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<Line.Info> result = new ArrayList<Line.Info>(); 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mixerProviderPath).iterator(); providers.hasNext();) { 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MixerProvider pr = (MixerProvider) providers.next(); 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info[] mixinfos = pr.getMixerInfo(); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Mixer.Info mixinfo : mixinfos) { 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer mix = pr.getMixer(mixinfo); 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Line.Info[] linfos = mix.getSourceLineInfo(info); 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Line.Info linfo : linfos) { 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.add(linfo); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Line.Info[] temp = new Line.Info[result.size()]; 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result.toArray(temp); 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static Line.Info[] getTargetLineInfo(Line.Info info) { 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<Line.Info> result = new ArrayList<Line.Info>(); 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mixerProviderPath).iterator(); providers.hasNext();) { 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MixerProvider pr = (MixerProvider) providers.next(); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info[] mixinfos = pr.getMixerInfo(); 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Mixer.Info mixinfo : mixinfos) { 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer mix = pr.getMixer(mixinfo); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Line.Info[] linfos = mix.getTargetLineInfo(info); 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Line.Info linfo : linfos) { 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.add(linfo); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Line.Info[] temp = new Line.Info[result.size()]; 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result.toArray(temp); 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isLineSupported(Line.Info info) { 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mixerProviderPath).iterator(); providers.hasNext();) { 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MixerProvider pr = (MixerProvider) providers.next(); 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info[] mixinfos = pr.getMixerInfo(); 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Mixer.Info mixinfo : mixinfos) { 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer mix = pr.getMixer(mixinfo); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (mix.isLineSupported(info)) { 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static Mixer getMixer(String propVal, Line.Info info, 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<?> mixerProviders) { 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int index = propVal.indexOf("#"); //$NON-NLS-1$ 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String className; 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String mixName; 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index == -1) { 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project className = propVal.trim(); 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mixName = ""; //$NON-NLS-1$ 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project className = propVal.substring(0, index).trim(); 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index == propVal.length()) { 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mixName = ""; //$NON-NLS-1$ 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mixName = propVal.substring(index + 1).trim(); 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info[] minfos = null; 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!className.equals("")) { //$NON-NLS-1$ 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = mixerProviders.iterator(); providers 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .hasNext();) { 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MixerProvider pr = (MixerProvider) (providers.next()); 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (className.equals(pr.getClass().getName())) { 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project minfos = pr.getMixerInfo(); 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (minfos == null) { 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project minfos = getMixerInfo(); 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!mixName.equals("")) { //$NON-NLS-1$ 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Mixer.Info minfo : minfos) { 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (mixName.equals(minfo.getName())) { 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return getMixer(minfo); 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (minfos.length > 0) { 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return getMixer(minfos[0]); 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static Line getLine(Line.Info info) throws LineUnavailableException { 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String propName = null; 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class lineClass = info.getLineClass(); 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (Clip.class.isAssignableFrom(lineClass)) { 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project propName = CLIP; 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (Port.class.isAssignableFrom(lineClass)) { 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project propName = PORT; 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (SourceDataLine.class.isAssignableFrom(lineClass)) { 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project propName = SOURCEDATALINE; 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (TargetDataLine.class.isAssignableFrom(lineClass)) { 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project propName = TARGETDATALINE; 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return getLine(propName, info); 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static Line getLine(String propName, Line.Info info) 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws LineUnavailableException { 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<?> mixerProviders = ProviderService 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getProviders(mixerProviderPath); 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (propName != null) { 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String propVal = System.getProperty(propName); 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (propVal != null) { 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer m = getMixer(propVal, info, mixerProviders); 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (m != null) { 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Line l = m.getLine(info); 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (l != null) { 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l; 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Properties soundProperties = ProviderService.getSoundProperties(); 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project propVal = soundProperties.getProperty(propName); 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (propVal != null) { 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer m = getMixer(propVal, info, mixerProviders); 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (m != null) { 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Line l = m.getLine(info); 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (l != null) { 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l; 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mixerProviderPath).iterator(); providers.hasNext();) { 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project MixerProvider pr = (MixerProvider) (providers.next()); 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info[] mixinfos = pr.getMixerInfo(); 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Mixer.Info mixinfo : mixinfos) { 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer mix = pr.getMixer(mixinfo); 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return mix.getLine(info); 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // continue 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-added 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (CLIP.equals(propName)) { 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (Clip)(Class.forName("com.android.internal.sound.sampled.AndroidClip").newInstance()); 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception ex) { 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Ignore 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-added 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.11=Could not get line 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(Messages.getString("sound.11")); //$NON-NLS-1$ 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static Clip getClip() throws LineUnavailableException { 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (Clip) getLine(new Line.Info(Clip.class)); 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static Clip getClip(Mixer.Info mixerInfo) 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws LineUnavailableException { 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (Clip) (getMixer(mixerInfo).getLine(new Line.Info(Clip.class))); 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static SourceDataLine getSourceDataLine(AudioFormat format) 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws LineUnavailableException { 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SourceDataLine line = (SourceDataLine) getLine(new Line.Info( 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SourceDataLine.class)); 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project line.open(format); 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return line; 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static SourceDataLine getSourceDataLine(AudioFormat format, 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info mixerinfo) throws LineUnavailableException { 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SourceDataLine line = (SourceDataLine) getMixer(mixerinfo).getLine( 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Line.Info(SourceDataLine.class)); 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project line.open(format); 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return line; 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static TargetDataLine getTargetDataLine(AudioFormat format) 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws LineUnavailableException { 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TargetDataLine line = (TargetDataLine) getLine(new Line.Info( 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TargetDataLine.class)); 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project line.open(format); 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return line; 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static TargetDataLine getTargetDataLine(AudioFormat format, 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Mixer.Info mixerinfo) throws LineUnavailableException { 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TargetDataLine line = (TargetDataLine) getMixer(mixerinfo).getLine( 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Line.Info(TargetDataLine.class)); 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project line.open(format); 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return line; 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioFormat.Encoding[] getTargetEncodings( 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat.Encoding sourceEncoding) { 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<AudioFormat.Encoding> result = new ArrayList<AudioFormat.Encoding>(); 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project formatConversionProviderPath).iterator(); providers.hasNext();) { 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FormatConversionProvider pr = (FormatConversionProvider) providers 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .next(); 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!pr.isSourceEncodingSupported(sourceEncoding)) { 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project continue; 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat.Encoding[] encodings = pr.getTargetEncodings(); 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (AudioFormat.Encoding encoding : encodings) { 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.add(encoding); 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat.Encoding[] temp = new AudioFormat.Encoding[result.size()]; 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result.toArray(temp); 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioFormat.Encoding[] getTargetEncodings( 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat sourceFormat) { 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<AudioFormat.Encoding> result = new ArrayList<AudioFormat.Encoding>(); 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project formatConversionProviderPath).iterator(); providers.hasNext();) { 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat.Encoding[] encodings = ((FormatConversionProvider) (providers 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .next())).getTargetEncodings(sourceFormat); 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (AudioFormat.Encoding encoding : encodings) { 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.add(encoding); 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat.Encoding[] temp = new AudioFormat.Encoding[result.size()]; 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result.toArray(temp); 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isConversionSupported( 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat) { 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project formatConversionProviderPath).iterator(); providers.hasNext();) { 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (((FormatConversionProvider) (providers.next())) 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .isConversionSupported(targetEncoding, sourceFormat)) { 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioInputStream getAudioInputStream( 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat.Encoding targetEncoding, AudioInputStream sourceStream) { 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (sourceStream.getFormat().getEncoding().equals(targetEncoding)) { 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sourceStream; 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project formatConversionProviderPath).iterator(); providers.hasNext();) { 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((FormatConversionProvider) (providers.next())) 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getAudioInputStream(targetEncoding, sourceStream); 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} catch (IllegalArgumentException e) {} 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.12=Could not get audio input stream from source stream 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(Messages.getString("sound.12")); //$NON-NLS-1$ 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioFormat[] getTargetFormats( 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat) { 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<AudioFormat> result = new ArrayList<AudioFormat>(); 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project formatConversionProviderPath).iterator(); providers.hasNext();) { 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat[] formats = ((FormatConversionProvider) (providers 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .next())) 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getTargetFormats(targetEncoding, sourceFormat); 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (AudioFormat format : formats) { 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.add(format); 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat[] temp = new AudioFormat[result.size()]; 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result.toArray(temp); 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isConversionSupported(AudioFormat targetFormat, 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat sourceFormat) { 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project formatConversionProviderPath).iterator(); providers.hasNext();) { 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (((FormatConversionProvider) (providers.next())) 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .isConversionSupported(targetFormat, sourceFormat)) { 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioInputStream getAudioInputStream( 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFormat targetFormat, AudioInputStream sourceStream) { 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (sourceStream.getFormat().matches(targetFormat)) { 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sourceStream; 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project formatConversionProviderPath).iterator(); providers.hasNext();) { 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((FormatConversionProvider) (providers.next())) 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getAudioInputStream(targetFormat, sourceStream); 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} catch (IllegalArgumentException e) {} 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.13=Could not get audio input stream from source stream 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(Messages.getString("sound.13")); //$NON-NLS-1$ 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioFileFormat getAudioFileFormat(InputStream stream) 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws UnsupportedAudioFileException, IOException { 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileReaderPath).iterator(); providers.hasNext();) { 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((AudioFileReader) (providers.next())) 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getAudioFileFormat(stream); 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} catch (UnsupportedAudioFileException e) {} 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.14=File is not a supported file type 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedAudioFileException(Messages.getString("sound.14")); //$NON-NLS-1$ 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioFileFormat getAudioFileFormat(URL url) 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws UnsupportedAudioFileException, IOException { 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileReaderPath).iterator(); providers.hasNext();) { 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((AudioFileReader) (providers.next())) 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getAudioFileFormat(url); 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} catch (UnsupportedAudioFileException e) {} 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.14=File is not a supported file type 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedAudioFileException(Messages.getString("sound.14")); //$NON-NLS-1$ 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioFileFormat getAudioFileFormat(File file) 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws UnsupportedAudioFileException, IOException { 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileReaderPath).iterator(); providers.hasNext();) { 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((AudioFileReader) (providers.next())) 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getAudioFileFormat(file); 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} catch (UnsupportedAudioFileException e) {} 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.14=File is not a supported file type 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedAudioFileException(Messages.getString("sound.14")); //$NON-NLS-1$ 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioInputStream getAudioInputStream(InputStream stream) 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws UnsupportedAudioFileException, IOException { 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (stream instanceof AudioInputStream) { 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (AudioInputStream) stream; 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileReaderPath).iterator(); providers.hasNext();) { 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((AudioFileReader) (providers.next())) 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getAudioInputStream(stream); 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} catch (UnsupportedAudioFileException e) {} 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-added 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileReader reader = (AudioFileReader)(Class.forName("com.android.internal.sound.sampled.AndroidAudioFileReader").newInstance()); 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return reader.getAudioInputStream(stream); 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception ex) { 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Ignore 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-added 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.15=Could not get audio input stream from input stream 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedAudioFileException(Messages.getString("sound.15")); //$NON-NLS-1$ 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioInputStream getAudioInputStream(URL url) 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws UnsupportedAudioFileException, IOException { 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileReaderPath).iterator(); providers.hasNext();) { 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((AudioFileReader) (providers.next())) 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getAudioInputStream(url); 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} catch (UnsupportedAudioFileException e) {} 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-added 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileReader reader = (AudioFileReader)(Class.forName("com.android.internal.sound.sampled.AndroidAudioFileReader").newInstance()); 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return reader.getAudioInputStream(url); 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception ex) { 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Ignore 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-added 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.16=Could not get audio input stream from input URL 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedAudioFileException(Messages.getString("sound.16")); //$NON-NLS-1$ 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioInputStream getAudioInputStream(File file) 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws UnsupportedAudioFileException, IOException { 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileReaderPath).iterator(); providers.hasNext();) { 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((AudioFileReader) (providers.next())) 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getAudioInputStream(file); 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} catch (UnsupportedAudioFileException e) {} 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-added 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileReader reader = (AudioFileReader)(Class.forName("com.android.internal.sound.sampled.AndroidAudioFileReader").newInstance()); 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return reader.getAudioInputStream(file); 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception ex) { 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Ignore 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-added 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.17=Could not get audio input stream from input file 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedAudioFileException(Messages.getString("sound.17")); //$NON-NLS-1$ 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioFileFormat.Type[] getAudioFileTypes() { 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<AudioFileFormat.Type> result = new ArrayList<AudioFileFormat.Type>(); 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileWriterPath).iterator(); providers.hasNext();) { 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileFormat.Type[] types = ((AudioFileWriter) (providers 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .next())).getAudioFileTypes(); 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (AudioFileFormat.Type type : types) { 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.add(type); 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileFormat.Type[] temp = new AudioFileFormat.Type[result.size()]; 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result.toArray(temp); 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isFileTypeSupported(AudioFileFormat.Type fileType) { 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileWriterPath).iterator(); providers.hasNext();) { 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (((AudioFileWriter) (providers.next())) 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .isFileTypeSupported(fileType)) { 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static AudioFileFormat.Type[] getAudioFileTypes( 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioInputStream stream) { 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<AudioFileFormat.Type> result = new ArrayList<AudioFileFormat.Type>(); 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileWriterPath).iterator(); providers.hasNext();) { 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileFormat.Type[] types = ((AudioFileWriter) (providers 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .next())).getAudioFileTypes(stream); 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (AudioFileFormat.Type type : types) { 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.add(type); 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassCastException e) {} 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileFormat.Type[] temp = new AudioFileFormat.Type[result.size()]; 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result.toArray(temp); 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean isFileTypeSupported(AudioFileFormat.Type fileType, 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioInputStream stream) { 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileWriterPath).iterator(); providers.hasNext();) { 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (((AudioFileWriter) (providers.next())).isFileTypeSupported( 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fileType, stream)) { 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static int write(AudioInputStream stream, 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileFormat.Type fileType, OutputStream out) throws IOException { 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileWriter writer; 614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileWriterPath).iterator(); providers.hasNext();) { 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writer = (AudioFileWriter) (providers.next()); 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (writer.isFileTypeSupported(fileType, stream)) { 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return writer.write(stream, fileType, out); 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.18=Type is not supported 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(Messages.getString("sound.18")); //$NON-NLS-1$ 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static int write(AudioInputStream stream, 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileFormat.Type fileType, File out) throws IOException { 627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AudioFileWriter writer; 628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Iterator providers = ProviderService.getProviders( 629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project audioFileWriterPath).iterator(); providers.hasNext();) { 630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writer = (AudioFileWriter) (providers.next()); 631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (writer.isFileTypeSupported(fileType, stream)) { 632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return writer.write(stream, fileType, out); 633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // sound.18=Type is not supported 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(Messages.getString("sound.18")); //$NON-NLS-1$ 637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 639