📄 tmatrixformatconversionprovider.java
字号:
/* * TMatrixFormatConversionProvider.java *//* * Copyright (c) 1999, 2000 by Matthias Pfisterer <Matthias.Pfisterer@gmx.de> * * * 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.share.sampled.convert;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.sound.sampled.AudioFormat;import org.tritonus.share.ArraySet;import org.tritonus.share.sampled.AudioFormats;/** * Base class for arbitrary formatConversionProviders. * * @author Matthias Pfisterer */public abstract class TMatrixFormatConversionProvider extends TSimpleFormatConversionProvider{ /* * keys: source AudioFormat * values: collection of possible target encodings * * Note that accessing values with get() is not appropriate, * since the equals() method in AudioFormat is not overloaded. * The hashtable is just used as a convenient storage * organization. */ private Map m_targetEncodingsFromSourceFormat; /* * keys: source AudioFormat * values: a Map that contains a mapping from target encodings * (keys) to a collection of target formats (values). * * Note that accessing values with get() is not appropriate, * since the equals() method in AudioFormat is not overloaded. * The hashtable is just used as a convenient storage * organization. */ private Map m_targetFormatsFromSourceFormat; protected TMatrixFormatConversionProvider( List sourceFormats, List targetFormats, boolean[][] abConversionPossible) { super(sourceFormats, targetFormats); m_targetEncodingsFromSourceFormat = new HashMap(); m_targetFormatsFromSourceFormat = new HashMap(); for (int nSourceFormat = 0; nSourceFormat < sourceFormats.size(); nSourceFormat++) { AudioFormat sourceFormat = (AudioFormat) sourceFormats.get(nSourceFormat); List supportedTargetEncodings = new ArraySet(); m_targetEncodingsFromSourceFormat.put(sourceFormat, supportedTargetEncodings); Map targetFormatsFromTargetEncodings = new HashMap(); m_targetFormatsFromSourceFormat.put(sourceFormat, targetFormatsFromTargetEncodings); for (int nTargetFormat = 0; nTargetFormat < targetFormats.size(); nTargetFormat++) { AudioFormat targetFormat = (AudioFormat) targetFormats.get(nTargetFormat); if (abConversionPossible[nSourceFormat][nTargetFormat]) { AudioFormat.Encoding targetEncoding = targetFormat.getEncoding(); supportedTargetEncodings.add(targetEncoding); Collection supportedTargetFormats = (Collection) targetFormatsFromTargetEncodings.get(targetEncoding); if (supportedTargetFormats == null) { supportedTargetFormats = new ArraySet(); targetFormatsFromTargetEncodings.put(targetEncoding, supportedTargetFormats); } supportedTargetFormats.add(targetFormat); } } } } public AudioFormat.Encoding[] getTargetEncodings(AudioFormat sourceFormat) { Iterator iterator = m_targetEncodingsFromSourceFormat.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); AudioFormat format = (AudioFormat) entry.getKey(); if (AudioFormats.matches(format, sourceFormat)) { Collection targetEncodings = (Collection) entry.getValue(); return (AudioFormat.Encoding[]) targetEncodings.toArray(EMPTY_ENCODING_ARRAY); } } return EMPTY_ENCODING_ARRAY; } // TODO: this should work on the array returned by getTargetEncodings(AudioFormat)/* public boolean isConversionSupported(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat) { return isAllowedSourceFormat(sourceFormat) && isTargetEncodingSupported(targetEncoding); }*/ public AudioFormat[] getTargetFormats(AudioFormat.Encoding targetEncoding, AudioFormat sourceFormat) { Iterator iterator = m_targetFormatsFromSourceFormat.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); AudioFormat format = (AudioFormat) entry.getKey(); if (AudioFormats.matches(format, sourceFormat)) { Map targetEncodings = (Map) entry.getValue(); Collection targetFormats = (Collection) targetEncodings.get(targetEncoding); if (targetFormats != null) { return (AudioFormat[]) targetFormats.toArray(EMPTY_FORMAT_ARRAY); } else { return EMPTY_FORMAT_ARRAY; } } } return EMPTY_FORMAT_ARRAY; }}/*** TMatrixFormatConversionProvider.java ***/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -