private byte[] DecodeFormat2(byte[] data) { short[] output = new short[data.Length * 2]; decode2.Decode(decode2State, output, data, data.Length); float[] f = Converters.shorts2floats(output, true); float[] s = Converters.mono2stereo(f); byte[] o = codecUpSampler.inputResample(Converters.floats2bytes(s), s.Length); return(o); }
/** * FORMAT 2 * G722 16kHz mono **/ private byte[] EncodeFormat2(float[] data) { byte[] rs = codecDownSampler.inputResample(Converters.floats2bytes(data), data.Length); float[] f = Converters.bytes2floats(rs); float[] mono = Converters.stereo2mono(f); short[] shorts = Converters.floats2shorts(mono, true); int bytes = (int)(shorts.Length / 2); byte[] output = new byte[bytes]; encode2.Encode(encode2State, output, shorts, shorts.Length); return(output); }
private byte[] DecodeFormat1(byte[] data) { // SPLIT INTO TWO PARTS byte[] L = new byte[data.Length / 2]; byte[] R = new byte[data.Length / 2]; Array.Copy(data, L, L.Length); Array.Copy(data, L.Length, R, 0, R.Length); short[] outputL = new short[L.Length * 2]; short[] outputR = new short[R.Length * 2]; decode1L.Decode(decode1Lstate, outputL, L, L.Length); decode1R.Decode(decode1Rstate, outputR, R, R.Length); short[] output = Converters.MuxDualMono(outputL, outputR); return(Converters.floats2bytes(Converters.shorts2floats(output, true))); }
private byte[] DecodeOpus(byte[] data, int packetSize) { // Decoding loop int frames = data.Length / packetSize; int frameSize = 960; // must be same as framesize used in input, you can use OpusPacketInfo.GetNumSamples() to determine this dynamically short[] outputBuffer; List <float> outData = new List <float>(); for (int i = 0; i < frames; i++) { outputBuffer = new short[frameSize * 2]; int thisFrameSize = opus_decoder.Decode(data, i * packetSize, packetSize, outputBuffer, 0, frameSize, false); outData.AddRange(Converters.shorts2floats(outputBuffer, true)); } return(Converters.floats2bytes(outData.ToArray())); }
private void FetchAudioFromInputBuffer() { if (inputBuffer != null) { double samplesToFetch = (inputBuffer.BufferedDuration.TotalMilliseconds - 50d) * ((internalFormatStereo.SampleRate * internalFormatStereo.Channels) / 1000d); // CHECK FOR WHOLE NUMBER if (samplesToFetch - (int)samplesToFetch != 0) { throw new ApplicationException("FetchAudioFromInputBuffer cannot fetch fractional samples. Adjust either internal sample rate or main server interval."); } // ONLY FETCH AUDIO IF BUFFER CONAINS ENOUGH if (inputBuffer.BufferedBytes > samplesToFetch && inputBuffer.BufferedDuration.TotalMilliseconds > 100) { float[] input = new float[(int)samplesToFetch]; inputResampler.Read(input, 0, (int)samplesToFetch); initialAudioProccessing(Converters.floats2bytes(input)); } } }
/** * FORMAT 0 * PCM 32bit float 48kHz **/ private byte[] EncodeFormat0(float[] data) { return(Converters.floats2bytes(data)); }