/// <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>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; }