Ejemplo n.º 1
0
    public Byte[] GetClipData()
    {
        if (_audio.clip == null)
        {
            return(null);
        }

        float[] samples = new float[_audio.clip.samples];
        _audio.clip.GetData(samples, 0);

        float[] compressSamples = null;
        bool    isRecord        = false;

        for (int i = samples.Length - 1; i >= 0; i--)
        {
            if (isRecord)
            {
                compressSamples[i] = samples[i];
            }
            else
            {
                if (samples[i] == 0 && !isRecord)
                {
                    continue;
                }
                else
                {
                    isRecord           = true;
                    compressSamples    = new float[i + 1];
                    compressSamples[i] = samples[i];
                }
            }
        }
        samples = null;
        samples = compressSamples;

        Byte[] outData = new byte[samples.Length * 2];

        for (int i = 0; i < samples.Length; i++)
        {
            Int16  temshort = (Int16)(samples[i] * INT16_SCALE);
            Byte[] temdata  = BitConverter.GetBytes(temshort);
            outData[i * 2]     = temdata[0];
            outData[i * 2 + 1] = temdata[1];
        }

        if (outData == null || outData.Length <= 0)
        {
            return(null);
        }
        Debug.Log("out data:" + outData.Length);
        Byte[] compressData = SevenZipCompress.Compress(outData);
        Debug.Log("compress data" + compressData.Length);
        return(compressData);
    }