예제 #1
0
 internal override VorbisFloor.PacketData UnpackPacket(DataPacket packet, int blockSize)
 {
     VorbisFloor.Floor0.PacketData0 packetData0_1 = new VorbisFloor.Floor0.PacketData0();
     packetData0_1.BlockSize = blockSize;
     VorbisFloor.Floor0.PacketData0 packetData0_2 = packetData0_1;
     packetData0_2.Amp = (float)packet.ReadBits(this._ampBits);
     if ((double)packetData0_2.Amp > 0.0)
     {
         try
         {
             List <float> list = new List <float>();
             uint         num  = (uint)packet.ReadBits(this._bookBits);
             if ((long)num >= (long)this._books.Length)
             {
                 throw new InvalidDataException();
             }
             VorbisCodebook vorbisCodebook = this._books[(IntPtr)num];
             for (int index1 = 0; index1 < this._order; ++index1)
             {
                 int index2 = vorbisCodebook.DecodeScalar(packet);
                 for (int index3 = 0; index3 < vorbisCodebook.Dimensions; ++index3)
                 {
                     list.Add(vorbisCodebook[index2, index3]);
                 }
             }
             packetData0_2.Coeff = list.ToArray();
         }
         catch (EndOfStreamException ex)
         {
             packetData0_2.Amp = 0.0f;
         }
     }
     return((VorbisFloor.PacketData)packetData0_2);
 }
예제 #2
0
            internal override void Apply(VorbisFloor.PacketData packetData, float[] residue)
            {
                VorbisFloor.Floor0.PacketData0 packetData0 = packetData as VorbisFloor.Floor0.PacketData0;
                if (packetData0 == null)
                {
                    throw new ArgumentException("Incorrect packet data!");
                }
                if ((double)packetData0.Amp <= 0.0)
                {
                    return;
                }
                float[] numArray = this._barkMaps[packetData0.BlockSize];
                int     index    = 0;

label_9:
                if (index >= packetData0.BlockSize)
                {
                    return;
                }
                double d = Math.PI * (double)numArray[index] / (double)this._bark_map_size;
                float  num1;
                int    num2;
                float  num3;
                int    num4;

                if (this._order % 2 == 1)
                {
                    num1 = (float)(1.0 - Math.Pow(Math.Cos(d), 2.0));
                    num2 = 3;
                    num3 = 0.25f;
                    num4 = 1;
                }
                else
                {
                    num1 = (float)(1.0 - Math.Cos(d));
                    num2 = 2;
                    num3 = (float)(1.0 + Math.Cos(d));
                    num4 = 2;
                }
                double num5 = (double)num1 * (double)(this._order - num2) / (4.0 * Math.Pow(Math.Cos((double)packetData0.Coeff[1]) - Math.Cos(d), 2.0) * (4.0 * Math.Pow(Math.Cos((double)packetData0.Coeff[3]) - Math.Cos(d), 2.0)) * (4.0 * Math.Pow(Math.Cos((double)packetData0.Coeff[5]) - Math.Cos(d), 2.0)));
                double num6 = (double)num3 * (double)(this._order - num4) / (4.0 * Math.Pow(Math.Cos((double)packetData0.Coeff[0]) - Math.Cos(d), 2.0) * (4.0 * Math.Pow(Math.Cos((double)packetData0.Coeff[2]) - Math.Cos(d), 2.0)) * (4.0 * Math.Pow(Math.Cos((double)packetData0.Coeff[4]) - Math.Cos(d), 2.0)));
                float  num7 = (float)Math.Exp(0.11512925 * ((double)packetData0.Amp * (double)this._ampOfs / ((double)((1 << this._ampBits) - 1) * Math.Sqrt(num5 + num6)) - (double)this._ampOfs));
                float  num8;

                do
                {
                    num8            = numArray[index];
                    residue[index] *= num7;
                    ++index;
                }while ((double)numArray[index] == (double)num8);
                goto label_9;
            }
예제 #3
0
파일: VorbisFloor.cs 프로젝트: Zeludon/FEZ
 internal override VorbisFloor.PacketData UnpackPacket(DataPacket packet, int blockSize)
 {
   VorbisFloor.Floor0.PacketData0 packetData0_1 = new VorbisFloor.Floor0.PacketData0();
   packetData0_1.BlockSize = blockSize;
   VorbisFloor.Floor0.PacketData0 packetData0_2 = packetData0_1;
   packetData0_2.Amp = (float) packet.ReadBits(this._ampBits);
   if ((double) packetData0_2.Amp > 0.0)
   {
     try
     {
       List<float> list = new List<float>();
       uint num = (uint) packet.ReadBits(this._bookBits);
       if ((long) num >= (long) this._books.Length)
         throw new InvalidDataException();
       VorbisCodebook vorbisCodebook = this._books[(IntPtr) num];
       for (int index1 = 0; index1 < this._order; ++index1)
       {
         int index2 = vorbisCodebook.DecodeScalar(packet);
         for (int index3 = 0; index3 < vorbisCodebook.Dimensions; ++index3)
           list.Add(vorbisCodebook[index2, index3]);
       }
       packetData0_2.Coeff = list.ToArray();
     }
     catch (EndOfStreamException ex)
     {
       packetData0_2.Amp = 0.0f;
     }
   }
   return (VorbisFloor.PacketData) packetData0_2;
 }