/// <summary>
 /// Obtains an audio input stream with the specified encoding from the given
 /// audio input stream.
 /// </summary>
 /// <remarks>
 /// Obtains an audio input stream with the specified encoding from the given
 /// audio input stream.
 /// </remarks>
 /// <param name="targetEncoding">- desired encoding of the stream after processing.</param>
 /// <param name="sourceStream">- stream from which data to be processed should be read.
 /// 	</param>
 /// <returns>
 /// stream from which processed data with the specified target
 /// encoding may be read.
 /// </returns>
 /// <exception>
 /// IllegalArgumentException
 /// - if the format combination supplied
 /// is not supported.
 /// </exception>
 public override javax.sound.sampled.AudioInputStream getAudioInputStream(javax.sound.sampled.AudioFormat.Encoding
     targetEncoding, javax.sound.sampled.AudioInputStream sourceStream)
 {
     if (isConversionSupported(targetEncoding, sourceStream.getFormat()))
     {
         javax.sound.sampled.AudioFormat[] formats = getTargetFormats(targetEncoding, sourceStream
             .getFormat());
         if (formats != null && formats.Length > 0)
         {
             javax.sound.sampled.AudioFormat sourceFormat = sourceStream.getFormat();
             javax.sound.sampled.AudioFormat targetFormat = formats[0];
             if (sourceFormat.Equals(targetFormat))
             {
                 return sourceStream;
             }
             else
             {
                 if (sourceFormat.getEncoding() is org.xiph.speex.spi.SpeexEncoding && targetFormat
                     .getEncoding().Equals(javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED))
                 {
                     return new org.xiph.speex.spi.Speex2PcmAudioInputStream(sourceStream, targetFormat
                         , -1);
                 }
                 else
                 {
                     if (sourceFormat.getEncoding().Equals(javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED
                         ) && targetFormat.getEncoding() is org.xiph.speex.spi.SpeexEncoding)
                     {
                         return new org.xiph.speex.spi.Pcm2SpeexAudioInputStream(sourceStream, targetFormat
                             , -1);
                     }
                     else
                     {
                         throw new System.ArgumentException("unable to convert " + sourceFormat.ToString()
                              + " to " + targetFormat.ToString());
                     }
                 }
             }
         }
         else
         {
             throw new System.ArgumentException("target format not found");
         }
     }
     else
     {
         throw new System.ArgumentException("conversion not supported");
     }
 }
 /// <summary>
 /// Obtains the file types that this audio file writer can write from the
 /// audio input stream specified.
 /// </summary>
 /// <remarks>
 /// Obtains the file types that this audio file writer can write from the
 /// audio input stream specified.
 /// </remarks>
 /// <param name="stream">
 /// - the audio input stream for which audio file type support
 /// is queried.
 /// </param>
 /// <returns>
 /// array of file types. If no file types are supported, an array of
 /// length 0 is returned.
 /// </returns>
 public override javax.sound.sampled.AudioFileFormat.Type[] getAudioFileTypes(javax.sound.sampled.AudioInputStream
     stream)
 {
     if (stream.getFormat().getEncoding() is org.xiph.speex.spi.SpeexEncoding)
     {
         return SPEEX_FORMAT;
     }
     else
     {
         return NO_FORMAT;
     }
 }