private void _UnpackCtor() { for (int i = 0; i < AudV.Length; i++) { AudV[i] = new AudioVariables(); } }
protected void unpInitData20(bool Solid) { if (!Solid) { UnpChannelDelta = UnpCurChannel = 0; UnpChannels = 1; // memset(AudV,0,sizeof(AudV)); AudV[0] = new AudioVariables(); AudV[1] = new AudioVariables(); AudV[2] = new AudioVariables(); AudV[3] = new AudioVariables(); // memset(UnpOldTable20,0,sizeof(UnpOldTable20)); Utility.Fill(UnpOldTable20, (byte)0); } }
void UnpInitData20(bool Solid) { if (!Solid) { TablesRead2 = false; UnpAudioBlock = false; UnpChannelDelta = 0; UnpCurChannel = 0; UnpChannels = 1; //memset(AudV,0,sizeof(AudV)); AudV = new AudioVariables[4]; Utility.Memset(UnpOldTable20, 0, UnpOldTable20.Length); //memset(MD,0,sizeof(MD)); MD = new DecodeTable[4]; } }
private void unpInitData20(bool Solid) { if (!Solid) { UnpChannelDelta = UnpCurChannel = 0; UnpChannels = 1; // memset(AudV,0,sizeof(AudV)); AudV[0] = new AudioVariables(); AudV[1] = new AudioVariables(); AudV[2] = new AudioVariables(); AudV[3] = new AudioVariables(); // memset(UnpOldTable20,0,sizeof(UnpOldTable20)); new Span <byte>(UnpOldTable20).Fill(0); } }
private void UnpInitData20(bool Solid) { if (!Solid) { TablesRead2 = false; UnpAudioBlock = false; UnpChannelDelta = 0; UnpCurChannel = 0; UnpChannels = 1; //memset(AudV,0,sizeof(AudV)); AudV = new AudioVariables[4]; new Span <byte>(UnpOldTable20).Clear(); //memset(MD,0,sizeof(MD)); MD = new DecodeTable[4]; } }
private byte DecodeAudio(int Delta) { AudioVariables v = AudV[UnpCurChannel]; v.ByteCount = v.ByteCount + 1; v.D4 = v.D3; v.D3 = v.D2; // ->D3=V->D2; v.D2 = v.LastDelta - v.D1; // ->D2=V->LastDelta-V->D1; v.D1 = v.LastDelta; // V->D1=V->LastDelta; // int PCh=8*V->LastChar+V->K1*V->D1 +V->K2*V->D2 +V->K3*V->D3 // +V->K4*V->D4+ V->K5*UnpChannelDelta; int PCh = 8 * v.LastChar + v.K1 * v.D1; PCh += v.K2 * v.D2 + v.K3 * v.D3; PCh += v.K4 * v.D4 + v.K5 * UnpChannelDelta; PCh = (Utility.URShift(PCh, 3)) & 0xFF; int Ch = PCh - Delta; int D = ((byte)Delta) << 3; v.Dif[0] += System.Math.Abs(D); // V->Dif[0]+=abs(D); v.Dif[1] += System.Math.Abs(D - v.D1); // V->Dif[1]+=abs(D-V->D1); v.Dif[2] += System.Math.Abs(D + v.D1); // V->Dif[2]+=abs(D+V->D1); v.Dif[3] += System.Math.Abs(D - v.D2); // V->Dif[3]+=abs(D-V->D2); v.Dif[4] += System.Math.Abs(D + v.D2); // V->Dif[4]+=abs(D+V->D2); v.Dif[5] += System.Math.Abs(D - v.D3); // V->Dif[5]+=abs(D-V->D3); v.Dif[6] += System.Math.Abs(D + v.D3); // V->Dif[6]+=abs(D+V->D3); v.Dif[7] += System.Math.Abs(D - v.D4); // V->Dif[7]+=abs(D-V->D4); v.Dif[8] += System.Math.Abs(D + v.D4); // V->Dif[8]+=abs(D+V->D4); v.Dif[9] += System.Math.Abs(D - UnpChannelDelta); // V->Dif[9]+=abs(D-UnpChannelDelta); v.Dif[10] += System.Math.Abs(D + UnpChannelDelta); // V->Dif[10]+=abs(D+UnpChannelDelta); v.LastDelta = (byte)(Ch - v.LastChar); UnpChannelDelta = v.LastDelta; v.LastChar = Ch; // V->LastChar=Ch; if ((v.ByteCount & 0x1F) == 0) { int MinDif = v.Dif[0], NumMinDif = 0; v.Dif[0] = 0; // ->Dif[0]=0; for (int I = 1; I < v.Dif.Length; I++) { if (v.Dif[I] < MinDif) { MinDif = v.Dif[I]; NumMinDif = I; } v.Dif[I] = 0; } switch (NumMinDif) { case 1: if (v.K1 >= -16) { v.K1 = v.K1 - 1; // V->K1--; } break; case 2: if (v.K1 < 16) { v.K1 = v.K1 + 1; // V->K1++; } break; case 3: if (v.K2 >= -16) { v.K2 = v.K2 - 1; // V->K2--; } break; case 4: if (v.K2 < 16) { v.K2 = v.K2 + 1; // V->K2++; } break; case 5: if (v.K3 >= -16) { v.K3 = v.K3 - 1; } break; case 6: if (v.K3 < 16) { v.K3 = v.K3 + 1; } break; case 7: if (v.K4 >= -16) { v.K4 = v.K4 - 1; } break; case 8: if (v.K4 < 16) { v.K4 = v.K4 + 1; } break; case 9: if (v.K5 >= -16) { v.K5 = v.K5 - 1; } break; case 10: if (v.K5 < 16) { v.K5 = v.K5 + 1; } break; } } return((byte)Ch); }
byte DecodeAudio(int Delta) { AudioVariables V = AudV[UnpCurChannel]; V.ByteCount++; V.D4 = V.D3; V.D3 = V.D2; V.D2 = V.LastDelta - V.D1; V.D1 = V.LastDelta; int PCh = 8 * V.LastChar + V.K1 * V.D1 + V.K2 * V.D2 + V.K3 * V.D3 + V.K4 * V.D4 + V.K5 * UnpChannelDelta; PCh = (PCh >> 3) & 0xFF; uint Ch = (uint)(PCh - Delta); int D = (sbyte)Delta; // Left shift of negative value is undefined behavior in C++, // so we cast it to unsigned to follow the standard. D = (int)((uint)D << 3); V.Dif[0] += (uint)Math.Abs(D); V.Dif[1] += (uint)Math.Abs(D - V.D1); V.Dif[2] += (uint)Math.Abs(D + V.D1); V.Dif[3] += (uint)Math.Abs(D - V.D2); V.Dif[4] += (uint)Math.Abs(D + V.D2); V.Dif[5] += (uint)Math.Abs(D - V.D3); V.Dif[6] += (uint)Math.Abs(D + V.D3); V.Dif[7] += (uint)Math.Abs(D - V.D4); V.Dif[8] += (uint)Math.Abs(D + V.D4); V.Dif[9] += (uint)Math.Abs(D - UnpChannelDelta); V.Dif[10] += (uint)Math.Abs(D + UnpChannelDelta); UnpChannelDelta = V.LastDelta = (sbyte)(Ch - V.LastChar); V.LastChar = (int)Ch; if ((V.ByteCount & 0x1F) == 0) { uint MinDif = V.Dif[0], NumMinDif = 0; V.Dif[0] = 0; for (uint I = 1; I < V.Dif.Length; I++) { if (V.Dif[I] < MinDif) { MinDif = V.Dif[I]; NumMinDif = I; } V.Dif[I] = 0; } switch (NumMinDif) { case 1: if (V.K1 >= -16) { V.K1--; } break; case 2: if (V.K1 < 16) { V.K1++; } break; case 3: if (V.K2 >= -16) { V.K2--; } break; case 4: if (V.K2 < 16) { V.K2++; } break; case 5: if (V.K3 >= -16) { V.K3--; } break; case 6: if (V.K3 < 16) { V.K3++; } break; case 7: if (V.K4 >= -16) { V.K4--; } break; case 8: if (V.K4 < 16) { V.K4++; } break; case 9: if (V.K5 >= -16) { V.K5--; } break; case 10: if (V.K5 < 16) { V.K5++; } break; } } return((byte)Ch); }
private byte DecodeAudio(int Delta) { AudioVariables variables = this.AudV[this.UnpCurChannel]; variables.ByteCount++; variables.D4 = variables.D3; variables.D3 = variables.D2; variables.D2 = variables.LastDelta - variables.D1; variables.D1 = variables.LastDelta; int number = (8 * variables.LastChar) + (variables.K1 * variables.D1); number += (variables.K2 * variables.D2) + (variables.K3 * variables.D3); number += (variables.K4 * variables.D4) + (variables.K5 * this.UnpChannelDelta); number = Utility.URShift(number, 3) & 0xff; int num2 = number - Delta; int num3 = ((byte)Delta) << 3; variables.Dif[0] += Math.Abs(num3); variables.Dif[1] += Math.Abs((int)(num3 - variables.D1)); variables.Dif[2] += Math.Abs((int)(num3 + variables.D1)); variables.Dif[3] += Math.Abs((int)(num3 - variables.D2)); variables.Dif[4] += Math.Abs((int)(num3 + variables.D2)); variables.Dif[5] += Math.Abs((int)(num3 - variables.D3)); variables.Dif[6] += Math.Abs((int)(num3 + variables.D3)); variables.Dif[7] += Math.Abs((int)(num3 - variables.D4)); variables.Dif[8] += Math.Abs((int)(num3 + variables.D4)); variables.Dif[9] += Math.Abs((int)(num3 - this.UnpChannelDelta)); variables.Dif[10] += Math.Abs((int)(num3 + this.UnpChannelDelta)); variables.LastDelta = (byte)(num2 - variables.LastChar); this.UnpChannelDelta = variables.LastDelta; variables.LastChar = num2; if ((variables.ByteCount & 0x1f) == 0) { int num4 = variables.Dif[0]; int num5 = 0; variables.Dif[0] = 0; for (int i = 1; i < variables.Dif.Length; i++) { if (variables.Dif[i] < num4) { num4 = variables.Dif[i]; num5 = i; } variables.Dif[i] = 0; } switch (num5) { case 1: if (variables.K1 >= -16) { variables.K1--; } break; case 2: if (variables.K1 < 0x10) { variables.K1++; } break; case 3: if (variables.K2 >= -16) { variables.K2--; } break; case 4: if (variables.K2 < 0x10) { variables.K2++; } break; case 5: if (variables.K3 >= -16) { variables.K3--; } break; case 6: if (variables.K3 < 0x10) { variables.K3++; } break; case 7: if (variables.K4 >= -16) { variables.K4--; } break; case 8: if (variables.K4 < 0x10) { variables.K4++; } break; case 9: if (variables.K5 >= -16) { variables.K5--; } break; case 10: if (variables.K5 < 0x10) { variables.K5++; } break; } } return((byte)num2); }