private byte[] SpeexEncode(short[] input, BandMode mode) { NSpeex.SpeexEncoder speexEnc = null; int byteLen = 320; switch (mode) { case BandMode.Narrow: speexEnc = m_narrow_enc; byteLen = 320; break; case BandMode.Wide: speexEnc = m_wide_enc; byteLen = 640; break; case BandMode.UltraWide: speexEnc = m_ultrawide_enc; byteLen = 1280; break; } byte[] encoded = USpeakPoolUtils.GetByte(byteLen + 4); int length = speexEnc.Encode(input, 0, input.Length, encoded, 4, encoded.Length); // first 4 bytes contains length byte[] len_bytes = BitConverter.GetBytes(length); System.Array.Copy(len_bytes, encoded, 4); return(encoded); }
public codecWrapper(NSpeex.BandMode mode, bool vbr) { encoder = new NSpeex.SpeexEncoder(mode); decoder = new NSpeex.SpeexDecoder(mode, false); encoder.VBR = vbr; encoder.Quality = 5; }
private byte[] EncodeAudio(short[] rawData) { var encoder = new NSpeex.SpeexEncoder(NSpeex.BandMode.Wide); encoder.Quality = 1; var encodedData = new List <byte[]>(); var inDataSize = rawData.Length; inDataSize = inDataSize + inDataSize % encoder.FrameSize; var inData = new short[inDataSize]; System.Array.Copy(rawData, inData, rawData.Length); var encodingFrameSize = encoder.FrameSize; var encodedBuffer = new byte[1024]; for (var offset = 0; offset + encodingFrameSize < inDataSize; offset += encodingFrameSize) { var encodedBytes = encoder.Encode(inData, offset, encodingFrameSize, encodedBuffer, 0, encodingFrameSize); var encodedFrame = new byte[encodedBytes]; System.Array.Copy(encodedBuffer, 0, encodedFrame, 0, encodedBytes); encodedData.Add(encodedFrame); } var ms = new MemoryStream(); var countBits = BitConverter.GetBytes((Int32)encodedData.Count); ms.Write(countBits, 0, countBits.Length); for (int i = 0; i < encodedData.Count; i++) { var d = encodedData[i]; var bc = BitConverter.GetBytes((Int32)d.Length); ms.Write(bc, 0, bc.Length); } for (int i = 0; i < encodedData.Count; i++) { var d = encodedData[i]; ms.Write(d, 0, d.Length); } return(ms.ToArray()); }
public SpeexCodex(BandMode mode) { this.mode = mode; encoder = new NSpeex.SpeexEncoder(SpeedxMode); decoder = new NSpeex.SpeexDecoder(SpeedxMode, false); encoder.VBR = true; encoder.Quality = 4; dataSize = encoder.FrameSize * (mode == BandMode.Narrow ? 8 : mode == BandMode.Wide ? 4 : 2); encodingBuffer = new short[dataSize]; encodedBuffer = new byte[dataSize]; decodeBuffer = new short[dataSize]; decodedBuffer = new float[dataSize]; int frequency = AudioUtils.GetFrequency(mode); var time = frequency / (float)dataSize; UnityEngine.Debug.Log("SpeedCodex created mode:" + mode + " dataSize:" + dataSize + " time:" + time); }