示例#1
0
        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;
            }
示例#3
0
        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());
        }
示例#4
0
        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);
        }