From 153acfac45733ea1e733997611ab26d373e1ce13 Mon Sep 17 00:00:00 2001 From: leathl Date: Sun, 28 Mar 2010 18:29:30 +0000 Subject: [PATCH] CustomizeMii 3.0 git-svn-id: svn://localhost/Users/andi/Downloads/code/trunk@34 eddbe33b-e435-4246-ac25-f5eb65f9a13c --- CustomizeMii/BNS.cs | 714 -- CustomizeMii/CustomizeMii.csproj | 27 +- CustomizeMii/CustomizeMii.csproj.user | 4 + .../CustomizeMii_BackgroundWorkers.cs | 896 +-- CustomizeMii/CustomizeMii_BnsConvert.cs | 46 +- .../CustomizeMii_ComplexForwarder.Designer.cs | 18 + CustomizeMii/CustomizeMii_ComplexForwarder.cs | 24 + CustomizeMii/CustomizeMii_DragDrop.cs | 69 +- CustomizeMii/CustomizeMii_Forwarders.cs | 17 +- .../CustomizeMii_InputBox.Designer.cs | 11 + CustomizeMii/CustomizeMii_InputBox.cs | 16 +- CustomizeMii/CustomizeMii_Main.Designer.cs | 80 +- CustomizeMii/CustomizeMii_Main.cs | 1954 ++--- CustomizeMii/CustomizeMii_Main.resx | 6 +- CustomizeMii/CustomizeMii_Preview.Designer.cs | 123 +- CustomizeMii/CustomizeMii_Preview.cs | 419 +- CustomizeMii/CustomizeMii_PrivateFunctions.cs | 1371 ++-- CustomizeMii/CustomizeMii_Structs.cs | 26 +- CustomizeMii/Program.cs | 26 +- CustomizeMii/Properties/AssemblyInfo.cs | 4 +- CustomizeMii/Properties/Resources.Designer.cs | 33 +- CustomizeMii/Properties/Resources.resx | 18 +- CustomizeMii/Readme.txt | 16 +- CustomizeMii/Wave.cs | 372 - CustomizeMii/Wii.cs | 6391 ----------------- CustomizeMii/libWiiSharp.dll | Bin 0 -> 159232 bytes CustomizeMiiInstaller/InstallerHelper.cs | 8 +- ForwardMii/ForwardMii.cs | 5 +- ForwardMii/ForwardMii_GX.cs | 20 +- ForwardMii/Resources/GX/video.cpp | 4 + 30 files changed, 2646 insertions(+), 10072 deletions(-) delete mode 100644 CustomizeMii/BNS.cs delete mode 100644 CustomizeMii/Wave.cs delete mode 100644 CustomizeMii/Wii.cs create mode 100644 CustomizeMii/libWiiSharp.dll diff --git a/CustomizeMii/BNS.cs b/CustomizeMii/BNS.cs deleted file mode 100644 index f723c27..0000000 --- a/CustomizeMii/BNS.cs +++ /dev/null @@ -1,714 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -//These classes are based on bns.py (by megazig) of the Wii.py Framework with improvements by me (Leathl) -//Thanks to Xuzz, SquidMan, megazig, Matt_P, Omega and The Lemon Man, the authors of Wii.py! - -using System; -using System.Collections.Generic; -using System.IO; -using WaveFile; - -namespace BNS -{ - internal class BNS_Data - { - //Private Varialbes - private byte[] magic = new byte[] { (byte)'D', (byte)'A', (byte)'T', (byte)'A' }; - private UInt32 size = 0x0004d000; - private byte[] data; - - //Public Variables - public UInt32 Size { get { return size; } set { size = value; } } - public byte[] Data { get { return data; } set { data = value; } } - - public BNS_Data() { } - - public void Write(Stream outStream) - { - byte[] temp = BitConverter.GetBytes(size); Array.Reverse(temp); - - outStream.Write(magic, 0, magic.Length); - outStream.Write(temp, 0, temp.Length); - outStream.Write(data, 0, data.Length); - } - } - - internal class BNS_Info - { - //Private Variables - private byte[] magic = new byte[] { (byte)'I', (byte)'N', (byte)'F', (byte)'O' }; - private UInt32 size = 0x000000a0; - private byte codec = 0x00; - private byte hasLoop = 0x00; - private byte channelCount = 0x02; - private byte zero = 0x00; - private UInt16 sampleRate = 0xac44; - private UInt16 pad0 = 0x0000; - private UInt32 loopStart = 0x00000000; - private UInt32 loopEnd = 0x00000000; //Or total sample count - private UInt32 offsetToChannelStart = 0x00000018; - private UInt32 pad1 = 0x00000000; - private UInt32 channel1StartOffset = 0x00000020; - private UInt32 channel2StartOffset = 0x0000002C; - private UInt32 channel1Start = 0x00000000; - private UInt32 coefficients1Offset = 0x0000038; - private UInt32 pad2 = 0x00000000; - private UInt32 channel2Start = 0x00000000; - private UInt32 coefficients2Offset = 0x00000068; - private UInt32 pad3 = 0x00000000; - private int[] coefficients1 = new int[16]; - private UInt16 channel1Gain = 0x0000; - private UInt16 channel1PredictiveScale = 0x0000; - private UInt16 channel1PreviousValue = 0x0000; - private UInt16 channel1NextPreviousValue = 0x0000; - private UInt16 channel1LoopPredictiveScale = 0x0000; - private UInt16 channel1LoopPreviousValue = 0x0000; - private UInt16 channel1LoopNextPreviousValue = 0x0000; - private UInt16 channel1LoopPadding = 0x0000; - private int[] coefficients2 = new int[16]; - private UInt16 channel2Gain = 0x0000; - private UInt16 channel2PredictiveScale = 0x0000; - private UInt16 channel2PreviousValue = 0x0000; - private UInt16 channel2NextPreviousValue = 0x0000; - private UInt16 channel2LoopPredictiveScale = 0x0000; - private UInt16 channel2LoopPreviousValue = 0x0000; - private UInt16 channel2LoopNextPreviousValue = 0x0000; - private UInt16 channel2LoopPadding = 0x0000; - - //Public Variables - public byte HasLoop { get { return hasLoop; } set { hasLoop = value; } } - public UInt32 Coefficients1Offset { get { return coefficients1Offset; } set { coefficients1Offset = value; } } - public UInt32 Channel1StartOffset { get { return channel1StartOffset; } set { channel1StartOffset = value; } } - public UInt32 Channel2StartOffset { get { return channel2StartOffset; } set { channel2StartOffset = value; } } - public UInt32 Size { get { return size; } set { size = value; } } - public UInt16 SampleRate { get { return sampleRate; } set { sampleRate = value; } } - public byte ChannelCount { get { return channelCount; } set { channelCount = value; } } - public UInt32 Channel1Start { get { return channel1Start; } set { channel1Start = value; } } - public UInt32 Channel2Start { get { return channel2Start; } set { channel2Start = value; } } - public UInt32 LoopStart { get { return loopStart; } set { loopStart = value; } } - public UInt32 LoopEnd { get { return loopEnd; } set { loopEnd = value; } } - public int[] Coefficients1 { get { return coefficients1; } set { coefficients1 = value; } } - public int[] Coefficients2 { get { return coefficients2; } set { coefficients2 = value; } } - - public BNS_Info() { } - - public void Write(Stream outStream) - { - outStream.Write(magic, 0, magic.Length); - - byte[] temp = BitConverter.GetBytes(size); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - outStream.WriteByte(codec); - outStream.WriteByte(hasLoop); - outStream.WriteByte(channelCount); - outStream.WriteByte(zero); - - temp = BitConverter.GetBytes(sampleRate); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(pad0); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(loopStart); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(loopEnd); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(offsetToChannelStart); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(pad1); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1StartOffset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2StartOffset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1Start); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(coefficients1Offset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - if (this.channelCount == 2) - { - temp = BitConverter.GetBytes(pad2); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2Start); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(coefficients2Offset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(pad3); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - foreach (int thisInt in coefficients1) - { - temp = BitConverter.GetBytes(thisInt); Array.Reverse(temp); - outStream.Write(temp, 2, temp.Length - 2); - } - - temp = BitConverter.GetBytes(channel1Gain); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1PredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1PreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1NextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopNextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPadding); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - foreach (int thisInt in coefficients2) - { - temp = BitConverter.GetBytes(thisInt); Array.Reverse(temp); - outStream.Write(temp, 2, temp.Length - 2); - } - - temp = BitConverter.GetBytes(channel2Gain); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2PredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2PreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2NextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2LoopPredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2LoopPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2LoopNextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2LoopPadding); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - } - else if (this.channelCount == 1) - { - foreach (int thisInt in coefficients1) - { - temp = BitConverter.GetBytes(thisInt); Array.Reverse(temp); - outStream.Write(temp, 2, temp.Length - 2); - } - - temp = BitConverter.GetBytes(channel1Gain); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1PredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1PreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1NextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopNextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPadding); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - } - } - } - - internal class BNS_Header - { - //Private Variables - private byte[] magic = new byte[] { (byte)'B', (byte)'N', (byte)'S', (byte)' ' }; - private UInt32 flags = 0xfeff0100; - private UInt32 fileSize = 0x0004d0c0; - private UInt16 size = 0x0020; - private UInt16 chunkCount = 0x0002; - private UInt32 infoOffset = 0x00000020; - private UInt32 infoLength = 0x000000a0; - private UInt32 dataOffset = 0x000000c0; - private UInt32 dataLength = 0x0004d000; - - //Public Varialbes - public UInt32 DataOffset { get { return dataOffset; } set { dataOffset = value; } } - public UInt32 InfoLength { get { return infoLength; } set { infoLength = value; } } - public UInt16 Size { get { return size; } set { size = value; } } - public UInt32 DataLength { get { return dataLength; } set { dataLength = value; } } - public UInt32 FileSize { get { return fileSize; } set { fileSize = value; } } - - public BNS_Header() { } - - public void Write(Stream outStream) - { - outStream.Write(magic, 0, magic.Length); - - byte[] temp = BitConverter.GetBytes(flags); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(fileSize); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(size); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(chunkCount); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(infoOffset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(infoLength); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(dataOffset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(dataLength); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - } - } - - public class BNS_File - { - //Private Variables - private BNS_Header bnsHeader = new BNS_Header(); - private BNS_Info bnsInfo = new BNS_Info(); - private BNS_Data bnsData = new BNS_Data(); - private int[,] lSamples = new int[2, 2]; - private int[,] rlSamples = new int[2, 2]; - private int[] tlSamples = new int[2]; - private int[] hbcDefTbl = new int[] { 674, 1040, 3598, -1738, 2270, -583, 3967, -1969, 1516, 381, 3453, -1468, 2606, -617, 3795, -1759 }; - private int[] defTbl = new int[] { 1820, -856, 3238, -1514, 2333, -550, 3336, -1376, 2444, -949, 3666, -1764, 2654, -701, 3420, -1398 }; - private int[] pHist1 = new int[2]; - private int[] pHist2 = new int[2]; - private int tempSampleCount; - private string waveFile; - private bool loopFromWave = false; - private bool converted = false; - private bool toMono = false; - - - - //Public Variables - /// - /// 0x00 (0) = No Loop, 0x01 (1) = Loop - /// - public byte HasLoop { get { return this.bnsInfo.HasLoop; } set { this.bnsInfo.HasLoop = value; } } - /// - /// The start sample of the Loop - /// - public UInt32 LoopStart { get { return this.bnsInfo.LoopStart; } set { this.bnsInfo.LoopStart = value; } } - /// - /// The total number of samples in this file - /// - public UInt32 TotalSampleCount { get { return this.bnsInfo.LoopEnd; } set { this.bnsInfo.LoopEnd = value; } } - /// - /// If true and the input Wave file is stereo, the BNS will be converted to Mono. - /// Be sure to set this before you call Convert()! - /// - public bool StereoToMono { get { return toMono; } set { toMono = value; } } - - - - //Public Functions - - public BNS_File(string waveFile) - { - this.waveFile = waveFile; - } - - public BNS_File(string waveFile, bool loopFromWave) - { - this.waveFile = waveFile; - this.loopFromWave = loopFromWave; - } - - /// - /// Returns the progress of the conversion - /// - public event EventHandler ProgressChanged; - - /// - /// Converts the Wave file to BNS - /// - public void Convert() - { - Convert(waveFile, loopFromWave); - } - - /// - /// Returns the BNS file as a Byte Array. If not already converted, it will be done first. - /// - /// - public byte[] ToByteArray() - { - return ToMemoryStream().ToArray(); - } - - /// - /// Returns the BNS file as a Memory Stream. If not already converted, it will be done first. - /// - /// - public MemoryStream ToMemoryStream() - { - if (!converted) - Convert(waveFile, loopFromWave); - - MemoryStream ms = new MemoryStream(); - - this.bnsHeader.Write(ms); - this.bnsInfo.Write(ms); - this.bnsData.Write(ms); - - return ms; - } - - /// - /// Saves the BNS file to the given path. If not already converted, it will be done first. - /// - /// - public void Save(string destionationFile) - { - if (File.Exists(destionationFile)) File.Delete(destionationFile); - - using (FileStream fs = new FileStream(destionationFile, FileMode.Create)) - { - byte[] bnsFile = ToMemoryStream().ToArray(); - fs.Write(bnsFile, 0, bnsFile.Length); - } - } - - /// - /// Sets the Loop to the given Start Sample. Be sure that you call Convert() first! - /// - /// - public void SetLoop(int loopStartSample) - { - this.bnsInfo.HasLoop = 0x01; - this.bnsInfo.LoopStart = (uint)loopStartSample; - } - - - - //Private Functions - - private void Convert(string waveFile, bool loopFromWave) - { - Wave wave = new Wave(waveFile); - int waveLoopCount = wave.LoopCount; - int waveLoopStart = wave.LoopStart; - - this.bnsInfo.ChannelCount = (byte)wave.ChannelCount; - this.bnsInfo.SampleRate = (ushort)wave.SampleRate; - - if (this.bnsInfo.ChannelCount > 2 || this.bnsInfo.ChannelCount < 1) - throw new Exception("Unsupported Count of Channels!"); - if (wave.BitDepth != 16) - throw new Exception("Only 16bit Wave files are supported!"); - if (wave.DataFormat != 1) - throw new Exception("The format of this Wave file is not supported!"); - - this.bnsData.Data = Encode(wave.GetAllFrames()); - wave.Close(); - - if (this.bnsInfo.ChannelCount == 1) - { - this.bnsHeader.InfoLength = 0x60; - this.bnsHeader.DataOffset = 0x80; - - this.bnsInfo.Size = 0x60; - this.bnsInfo.Channel1StartOffset = 0x0000001C; - this.bnsInfo.Channel2StartOffset = 0x00000000; - this.bnsInfo.Channel1Start = 0x00000028; - this.bnsInfo.Coefficients1Offset = 0x00000000; - } - - this.bnsData.Size = (uint)bnsData.Data.Length + 8; - - this.bnsHeader.DataLength = this.bnsData.Size; - this.bnsHeader.FileSize = this.bnsHeader.Size + this.bnsInfo.Size + this.bnsData.Size; - - if (loopFromWave) - if (waveLoopCount == 1) - if (waveLoopStart != -1) - { this.bnsInfo.LoopStart = (uint)waveLoopStart; this.bnsInfo.HasLoop = 0x01; } - - this.bnsInfo.LoopEnd = (uint)tempSampleCount; - - for (int i = 0; i < 16; i++) - { - this.bnsInfo.Coefficients1[i] = this.defTbl[i]; - - if (this.bnsInfo.ChannelCount == 2) - this.bnsInfo.Coefficients2[i] = this.defTbl[i]; - } - - this.converted = true; - } - - private byte[] Encode(byte[] inputFrames) - { - int offset = 0; - int[] sampleBuffer = new int[14]; - - this.tempSampleCount = inputFrames.Length / (bnsInfo.ChannelCount == 2 ? 4 : 2); - int modLength = (inputFrames.Length / (bnsInfo.ChannelCount == 2 ? 4 : 2)) % 14; - - Array.Resize(ref inputFrames, inputFrames.Length + ((14 - modLength) * (bnsInfo.ChannelCount == 2 ? 4 : 2))); - - int sampleCount = inputFrames.Length / (bnsInfo.ChannelCount == 2 ? 4 : 2); - - int blocks = (sampleCount + 13) / 14; - - List soundDataLeft = new List(); - List soundDataRight = new List(); - - int co = offset; - - if (this.toMono && this.bnsInfo.ChannelCount == 2) this.bnsInfo.ChannelCount = 1; - else if (this.toMono) this.toMono = false; - - for (int j = 0; j < sampleCount; j++) - { - soundDataLeft.Add(BitConverter.ToInt16(inputFrames, co)); - co += 2; - - if (this.bnsInfo.ChannelCount == 2 || toMono) - { - soundDataRight.Add(BitConverter.ToInt16(inputFrames, co)); - co += 2; - } - } - - byte[] data = new byte[(this.bnsInfo.ChannelCount == 2 ? (blocks * 16) : (blocks * 8))]; - - int data1Offset = 0; - int data2Offset = blocks * 8; - - this.bnsInfo.Channel2Start = (this.bnsInfo.ChannelCount == 2 ? (uint)data2Offset : 0); - - int[] leftSoundData = soundDataLeft.ToArray(); - int[] rightSoundData = soundDataRight.ToArray(); - - for (int y = 0; y < blocks; y++) - { - try - { - if (y % (int)(blocks / 100) == 0 || (y + 1) == blocks) - ChangeProgress((y + 1) * 100 / blocks); - } - catch { } - - for (int a = 0; a < 14; a++) - sampleBuffer[a] = leftSoundData[y * 14 + a]; - - byte[] outBuffer = RepackAdpcm(0, this.defTbl, sampleBuffer); - - for (int a = 0; a < 8; a++) - data[data1Offset + a] = outBuffer[a]; - - data1Offset += 8; - - if (this.bnsInfo.ChannelCount == 2) - { - for (int a = 0; a < 14; a++) - sampleBuffer[a] = rightSoundData[y * 14 + a]; - - outBuffer = RepackAdpcm(1, this.defTbl, sampleBuffer); - - for (int a = 0; a < 8; a++) - data[data2Offset + a] = outBuffer[a]; - - data2Offset += 8; - } - } - - this.bnsInfo.LoopEnd = (uint)(blocks * 7); - - return data; - } - - private byte[] RepackAdpcm(int index, int[] table, int[] inputBuffer) - { - byte[] data = new byte[8]; - int[] blSamples = new int[2]; - int bestIndex = -1; - double bestError = 999999999.0; - double error; - - for (int tableIndex = 0; tableIndex < 8; tableIndex++) - { - byte[] testData = CompressAdpcm(index, table, tableIndex, inputBuffer, out error); - - if (error < bestError) - { - bestError = error; - - for (int i = 0; i < 8; i++) - data[i] = testData[i]; - for (int i = 0; i < 2; i++) - blSamples[i] = this.tlSamples[i]; - - bestIndex = tableIndex; - } - } - - for (int i = 0; i < 2; i++) - this.rlSamples[index, i] = blSamples[i]; - - return data; - } - - private byte[] CompressAdpcm(int index, int[] table, int tableIndex, int[] inputBuffer, out double outError) - { - byte[] data = new byte[8]; - int error = 0; - int factor1 = table[2 * tableIndex + 0]; - int factor2 = table[2 * tableIndex + 1]; - - int exponent = DetermineStdExponent(index, table, tableIndex, inputBuffer); - - while (exponent <= 15) - { - bool breakIt = false; - error = 0; - data[0] = (byte)(exponent | (tableIndex << 4)); - - for (int i = 0; i < 2; i++) - this.tlSamples[i] = this.rlSamples[index, i]; - - int j = 0; - - for (int i = 0; i < 14; i++) - { - int predictor = (int)((this.tlSamples[1] * factor1 + this.tlSamples[0] * factor2) >> 11); - int residual = (inputBuffer[i] - predictor) >> exponent; - - if (residual > 7 || residual < -8) - { - exponent++; - breakIt = true; - break; - } - - int nibble = Clamp(residual, -8, 7); - - if ((i & 1) != 0) - data[i / 2 + 1] = (byte)(data[i / 2 + 1] | (nibble & 0xf)); - else - data[i / 2 + 1] = (byte)(nibble << 4); - - predictor += nibble << exponent; - - this.tlSamples[0] = this.tlSamples[1]; - this.tlSamples[1] = Clamp(predictor, -32768, 32767); - - error += (int)(Math.Pow((double)(this.tlSamples[1] - inputBuffer[i]), 2)); - } - - if (!breakIt) j = 14; - - if (j == 14) break; - } - - outError = error; - return data; - } - - private int DetermineStdExponent(int index, int[] table, int tableIndex, int[] inputBuffer) - { - int[] elSamples = new int[2]; - int maxResidual = 0; - int factor1 = table[2 * tableIndex + 0]; - int factor2 = table[2 * tableIndex + 1]; - - for (int i = 0; i < 2; i++) - elSamples[i] = this.rlSamples[index, i]; - - for (int i = 0; i < 14; i++) - { - int predictor = (elSamples[1] * factor1 + elSamples[0] * factor2) >> 11; - int residual = inputBuffer[i] - predictor; - - if (residual > maxResidual) - maxResidual = residual; - - elSamples[0] = elSamples[1]; - elSamples[1] = inputBuffer[i]; - } - - return FindExponent(maxResidual); - } - - private int FindExponent(double residual) - { - int exponent = 0; - - while (residual > 7.5 || residual < -8.5) - { - exponent++; - residual /= 2.0; - } - - return exponent; - } - - private int Clamp(int input, int min, int max) - { - if (input < min) return min; - if (input > max) return max; - return input; - } - - private void ChangeProgress(int progressPercentage) - { - EventHandler progressChanged = ProgressChanged; - if (progressChanged != null) - { - progressChanged(new object(), new System.ComponentModel.ProgressChangedEventArgs(progressPercentage, new object())); - } - } - } -} diff --git a/CustomizeMii/CustomizeMii.csproj b/CustomizeMii/CustomizeMii.csproj index 1fd7779..aec19f2 100644 --- a/CustomizeMii/CustomizeMii.csproj +++ b/CustomizeMii/CustomizeMii.csproj @@ -55,6 +55,7 @@ full x86 prompt + true bin\x86\Release\ @@ -65,13 +66,9 @@ prompt - + False - ..\CustomizeMiiInstaller\bin\Release\CustomizeMiiInstaller.dll - - - False - ..\ForwardMii\bin\x86\Release\ForwardMii.dll + .\libWiiSharp.dll @@ -79,7 +76,6 @@ - Form @@ -153,8 +149,8 @@ SettingsSingleFileGenerator Settings.Designer.cs - - + + CustomizeMii_Preview.cs @@ -170,8 +166,6 @@ CustomizeMii_Preview.cs - - @@ -182,6 +176,7 @@ + @@ -210,6 +205,16 @@ false + + + {475F3ADF-B529-449F-89DA-BA5E8BE15DD5} + CustomizeMiiInstaller + + + {20CB2CA7-6767-4758-97FA-97395F47CD6B} + ForwardMii + +