/// <summary> /// Obtains the set of target formats with the encoding specified supported by /// the format converter. /// </summary> /// <remarks> /// Obtains the set of target formats with the encoding specified supported by /// the format converter. If no target formats with the specified encoding are /// supported for this source format, an array of length 0 is returned. /// </remarks> /// <param name="targetEncoding">desired encoding of the outgoing data.</param> /// <param name="sourceFormat">format of the incoming data.</param> /// <returns>array of supported target formats.</returns> public override javax.sound.sampled.AudioFormat[] getTargetFormats(javax.sound.sampled.AudioFormat.Encoding targetEncoding, javax.sound.sampled.AudioFormat sourceFormat) { if (sourceFormat.getEncoding().Equals(javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED ) && targetEncoding is org.xiph.speex.spi.SpeexEncoding) { if (sourceFormat.getChannels() > 2 || sourceFormat.getChannels() <= 0 || sourceFormat .isBigEndian()) { javax.sound.sampled.AudioFormat[] formats = new javax.sound.sampled.AudioFormat[] { }; return formats; } else { javax.sound.sampled.AudioFormat[] formats = new javax.sound.sampled.AudioFormat[] { new javax.sound.sampled.AudioFormat(targetEncoding, sourceFormat.getSampleRate (), -1, sourceFormat.getChannels(), -1, -1, false) }; // sample size in bits // frame size // frame rate // little endian return formats; } } else { if (sourceFormat.getEncoding() is org.xiph.speex.spi.SpeexEncoding && targetEncoding .Equals(javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED)) { javax.sound.sampled.AudioFormat[] formats = new javax.sound.sampled.AudioFormat[] { new javax.sound.sampled.AudioFormat(sourceFormat.getSampleRate(), 16, sourceFormat .getChannels(), true, false) }; // sample size in bits // signed // little endian (for PCM wav) return formats; } else { javax.sound.sampled.AudioFormat[] formats = new javax.sound.sampled.AudioFormat[] { }; return formats; } } }
/// <summary> /// Obtains an audio input stream with the specified format from the given /// audio input stream. /// </summary> /// <remarks> /// Obtains an audio input stream with the specified format from the given /// audio input stream. /// </remarks> /// <param name="targetFormat">- desired data format 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 format 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 targetFormat, javax.sound.sampled.AudioInputStream sourceStream) { if (isConversionSupported(targetFormat, sourceStream.getFormat())) { javax.sound.sampled.AudioFormat[] formats = getTargetFormats(targetFormat.getEncoding (), sourceStream.getFormat()); if (formats != null && formats.Length > 0) { javax.sound.sampled.AudioFormat sourceFormat = sourceStream.getFormat(); 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 set of target format encodings supported by the format /// converter given a particular source format. /// </summary> /// <remarks> /// Obtains the set of target format encodings supported by the format /// converter given a particular source format. If no target format encodings /// are supported for this source format, an array of length 0 is returned. /// </remarks> /// <param name="sourceFormat">format of the incoming data.</param> /// <returns>array of supported target format encodings.</returns> public override javax.sound.sampled.AudioFormat.Encoding[] getTargetEncodings(javax.sound.sampled.AudioFormat sourceFormat) { if (sourceFormat.getEncoding().Equals(javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED )) { javax.sound.sampled.AudioFormat.Encoding[] encodings = new javax.sound.sampled.AudioFormat.Encoding [] { org.xiph.speex.spi.SpeexEncoding.SPEEX_Q0, org.xiph.speex.spi.SpeexEncoding .SPEEX_Q1, org.xiph.speex.spi.SpeexEncoding.SPEEX_Q2, org.xiph.speex.spi.SpeexEncoding .SPEEX_Q3, org.xiph.speex.spi.SpeexEncoding.SPEEX_Q4, org.xiph.speex.spi.SpeexEncoding .SPEEX_Q5, org.xiph.speex.spi.SpeexEncoding.SPEEX_Q6, org.xiph.speex.spi.SpeexEncoding .SPEEX_Q7, org.xiph.speex.spi.SpeexEncoding.SPEEX_Q8, org.xiph.speex.spi.SpeexEncoding .SPEEX_Q9, org.xiph.speex.spi.SpeexEncoding.SPEEX_Q10, org.xiph.speex.spi.SpeexEncoding .SPEEX_VBR0, org.xiph.speex.spi.SpeexEncoding.SPEEX_VBR1, org.xiph.speex.spi.SpeexEncoding .SPEEX_VBR2, org.xiph.speex.spi.SpeexEncoding.SPEEX_VBR3, org.xiph.speex.spi.SpeexEncoding .SPEEX_VBR4, org.xiph.speex.spi.SpeexEncoding.SPEEX_VBR5, org.xiph.speex.spi.SpeexEncoding .SPEEX_VBR6, org.xiph.speex.spi.SpeexEncoding.SPEEX_VBR7, org.xiph.speex.spi.SpeexEncoding .SPEEX_VBR8, org.xiph.speex.spi.SpeexEncoding.SPEEX_VBR9, org.xiph.speex.spi.SpeexEncoding .SPEEX_VBR10 }; return encodings; } else { if (sourceFormat.getEncoding() is org.xiph.speex.spi.SpeexEncoding) { javax.sound.sampled.AudioFormat.Encoding[] encodings = new javax.sound.sampled.AudioFormat.Encoding [] { javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED }; return encodings; } else { javax.sound.sampled.AudioFormat.Encoding[] encodings = new javax.sound.sampled.AudioFormat.Encoding [] { }; return encodings; } } }
/// <summary>Constructor</summary> /// <param name="mode">the mode of the encoder (0=NB, 1=WB, 2=UWB).</param> /// <param name="quality">the quality setting of the encoder (between 0 and 10).</param> /// <param name="in">the underlying input stream.</param> /// <param name="format">the target format of this stream's audio data.</param> /// <param name="length">the length in sample frames of the data in this stream.</param> /// <param name="size">the buffer size.</param> /// <exception> /// IllegalArgumentException /// if size <= 0. /// </exception> public Pcm2SpeexAudioInputStream(int mode, int quality, java.io.InputStream @in, javax.sound.sampled.AudioFormat format, long length, int size) : base(@in, format , length, size) { // public static final boolean DEFAULT_VBR = true; // .4s of audio // Speex variables // Ogg variables // Ogg initialisation granulepos = 0; if (streamSerialNumber == 0) { streamSerialNumber = new java.util.Random().nextInt(); } packetsPerOggPage = DEFAULT_PACKETS_PER_OGG_PAGE; packetCount = 0; pageCount = 0; // Speex initialisation framesPerPacket = DEFAULT_FRAMES_PER_PACKET; int samplerate = (int)format.getSampleRate(); if (samplerate < 0) { samplerate = DEFAULT_SAMPLERATE; } channels = format.getChannels(); if (channels < 0) { channels = DEFAULT_CHANNELS; } if (mode < 0) { mode = (samplerate < 12000) ? 0 : ((samplerate < 24000) ? 1 : 2); } this.mode = mode; javax.sound.sampled.AudioFormat.Encoding encoding = format.getEncoding(); if (quality < 0) { if (encoding is org.xiph.speex.spi.SpeexEncoding) { quality = ((org.xiph.speex.spi.SpeexEncoding)encoding).getQuality(); } else { quality = DEFAULT_QUALITY; } } encoder = new org.xiph.speex.SpeexEncoder(); encoder.init(mode, quality, samplerate, channels); if (encoding is org.xiph.speex.spi.SpeexEncoding && ((org.xiph.speex.spi.SpeexEncoding )encoding).isVBR()) { setVbr(true); } else { setVbr(false); } frameSize = 2 * channels * encoder.getFrameSize(); // Misc initialsation comment = "Encoded with " + org.xiph.speex.SpeexEncoder.VERSION; first = true; }