public BigArray <float> GenerateMissingFrame(int frequency) { int frameSize = frameSizes[frequency * 1000]; codecWrapper codec = encoders[frequency * 1000]; short[] decodedFrame16Bit = TempArray <short> .Obtain(frameSize * 4); int decoded = codec.decoder.Decode(null, 0, 0, decodedFrame16Bit, 0, true); if (tempOutputArray.Length != decoded) { tempOutputArray.Resize(decoded); } for (int i = 0; i < decoded; i++) { float val = (float)decodedFrame16Bit[i]; val /= short.MaxValue; tempOutputArray[i] = val; } TempArray <short> .Release(decodedFrame16Bit); return(tempOutputArray); }
public BigArray <float> DecodeFrame(VoicePacketWrapper data) { int frameSize = frameSizes[data.Frequency * 1000]; codecWrapper codec = encoders[data.Frequency * 1000]; short[] decodedFrame16Bit = TempArray <short> .Obtain(frameSize * 4); int decoded = codec.decoder.Decode(data.RawData, 0, data.RawData.Length, decodedFrame16Bit, 0, false); if (tempOutputArray.Length != decoded) { tempOutputArray.Resize(decoded); } for (int i = 0; i < decoded; i++) { float val = (float)decodedFrame16Bit[i]; val /= short.MaxValue; tempOutputArray[i] = val; } TempArray <short> .Release(decodedFrame16Bit); return(tempOutputArray); }
public VoicePacketWrapper?GetNextEncodedFrame(int frequency) { int frameSize = frameSizes[frequency]; codecWrapper codec = encoders[frequency]; float[] chunk = TempArray <float> .Obtain(frameSize); bool chunkAvailable = chunkBuffer.RetrieveChunk(chunk); if (!chunkAvailable) { TempArray <float> .Release(chunk); return(null); } tempPacketWrapper = new VoicePacketWrapper(); tempPacketWrapper.Frequency = (byte)(frequency / 1000); short[] audio16bit = TempArray <short> .Obtain(frameSize); for (int i = 0; i < frameSize; i++) { float val = chunk[i] * short.MaxValue; audio16bit[i] = (short)val; } TempArray <float> .Release(chunk); byte[] buffer = TempArray <byte> .Obtain(audio16bit.Length * 2); int encoded = codec.encoder.Encode(audio16bit, 0, frameSize, buffer, 0, buffer.Length); TempArray <short> .Release(audio16bit); tempPacketWrapper.RawData = new byte[encoded]; System.Buffer.BlockCopy(buffer, 0, tempPacketWrapper.RawData, 0, encoded); TempArray <byte> .Release(buffer); return(tempPacketWrapper); }