/* * TAudioConfig.java * * This file is part of Tritonus: http://www.tritonus.org/ */ /* * Copyright (c) 1999 - 2004 by Matthias Pfisterer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ package org.tritonus.core; import java.util.Set; import java.util.Iterator; import javax.sound.sampled.Mixer; import javax.sound.sampled.spi.AudioFileWriter; import javax.sound.sampled.spi.AudioFileReader; import javax.sound.sampled.spi.FormatConversionProvider; import javax.sound.sampled.spi.MixerProvider; import org.tritonus.share.ArraySet; import org.tritonus.core.TInit.ProviderRegistrationAction; /** TODO: */ public class TAudioConfig { private static Set<AudioFileWriter> sm_audioFileWriters = null; private static Set<AudioFileReader> sm_audioFileReaders = null; private static Set<FormatConversionProvider> sm_formatConversionProviders = null; private static Set<MixerProvider> sm_mixerProviders = null; private static Mixer.Info sm_defaultMixerInfo; /** Constructor to prevent instantiation. */ private TAudioConfig() { } private static void registerAudioFileReaders() { ProviderRegistrationAction action = null; action = new ProviderRegistrationAction() { public void register(Object obj) throws Exception { AudioFileReader provider = (AudioFileReader) obj; TAudioConfig.addAudioFileReader(provider); } }; TInit.registerClasses(AudioFileReader.class, action); } private static void registerAudioFileWriters() { ProviderRegistrationAction action = null; action = new ProviderRegistrationAction() { public void register(Object obj) throws Exception { AudioFileWriter provider = (AudioFileWriter) obj; TAudioConfig.addAudioFileWriter(provider); } }; TInit.registerClasses(AudioFileWriter.class, action); } private static void registerFormatConversionProviders() { ProviderRegistrationAction action = null; action = new ProviderRegistrationAction() { public void register(Object obj) throws Exception { FormatConversionProvider provider = (FormatConversionProvider) obj; TAudioConfig.addFormatConversionProvider(provider); } }; TInit.registerClasses(FormatConversionProvider.class, action); } private static void registerMixerProviders() { ProviderRegistrationAction action = null; action = new ProviderRegistrationAction() { public void register(Object obj) throws Exception { MixerProvider provider = (MixerProvider) obj; TAudioConfig.addMixerProvider(provider); } }; TInit.registerClasses(MixerProvider.class, action); } //////////////////////////////////////////////////////////////// public static synchronized void addAudioFileReader(AudioFileReader provider) { getAudioFileReadersImpl().add(provider); } public static synchronized void removeAudioFileReader(AudioFileReader provider) { getAudioFileReadersImpl().remove(provider); } public static synchronized Iterator<AudioFileReader> getAudioFileReaders() { return getAudioFileReadersImpl().iterator(); } private static synchronized Set<AudioFileReader> getAudioFileReadersImpl() { if (sm_audioFileReaders == null) { sm_audioFileReaders = new ArraySet<AudioFileReader>(); registerAudioFileReaders(); } return sm_audioFileReaders; } public static synchronized void addAudioFileWriter(AudioFileWriter provider) { getAudioFileWritersImpl().add(provider); } public static synchronized void removeAudioFileWriter(AudioFileWriter provider) { getAudioFileWritersImpl().remove(provider); } public static synchronized Iterator<AudioFileWriter> getAudioFileWriters() { return getAudioFileWritersImpl().iterator(); } private static synchronized Set<AudioFileWriter> getAudioFileWritersImpl() { if (sm_audioFileWriters == null) { sm_audioFileWriters = new ArraySet<AudioFileWriter>(); registerAudioFileWriters(); } return sm_audioFileWriters; } public static synchronized void addFormatConversionProvider(FormatConversionProvider provider) { getFormatConversionProvidersImpl().add(provider); } public static synchronized void removeFormatConversionProvider(FormatConversionProvider provider) { getFormatConversionProvidersImpl().remove(provider); } public static synchronized Iterator<FormatConversionProvider> getFormatConversionProviders() { return getFormatConversionProvidersImpl().iterator(); } private static synchronized Set<FormatConversionProvider> getFormatConversionProvidersImpl() { if (sm_formatConversionProviders == null) { sm_formatConversionProviders = new ArraySet<FormatConversionProvider>(); registerFormatConversionProviders(); } return sm_formatConversionProviders; } public static synchronized void addMixerProvider(MixerProvider provider) { getMixerProvidersImpl().add(provider); } public static synchronized void removeMixerProvider(MixerProvider provider) { getMixerProvidersImpl().remove(provider); } public static synchronized Iterator<MixerProvider> getMixerProviders() { return getMixerProvidersImpl().iterator(); } private static synchronized Set<MixerProvider> getMixerProvidersImpl() { if (sm_mixerProviders == null) { sm_mixerProviders = new ArraySet<MixerProvider>(); registerMixerProviders(); } return sm_mixerProviders; } // TODO: a way to set the default mixer public static Mixer.Info getDefaultMixerInfo() { return sm_defaultMixerInfo; } } /*** TAudioConfig.java ***/