diff --git a/DrumKit.sln b/DrumKit.sln index b14fa24..924b763 100644 --- a/DrumKit.sln +++ b/DrumKit.sln @@ -43,4 +43,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(Performance) = preSolution + HasPerformanceSessions = true + EndGlobalSection EndGlobal diff --git a/DrumKit.suo b/DrumKit.suo new file mode 100644 index 0000000..0e5839d Binary files /dev/null and b/DrumKit.suo differ diff --git a/DrumKit.v11.suo b/DrumKit.v11.suo index 973c967..ef17176 100644 Binary files a/DrumKit.v11.suo and b/DrumKit.v11.suo differ diff --git a/DrumKit/App.xaml.cs b/DrumKit/App.xaml.cs index 4106c6c..f7e1fd0 100644 --- a/DrumKit/App.xaml.cs +++ b/DrumKit/App.xaml.cs @@ -64,7 +64,7 @@ namespace DrumKit // When the navigation stack isn't restored navigate to the first page, // configuring the new page by passing required information as a navigation // parameter - if (!rootFrame.Navigate(typeof(MainPage), args.Arguments)) + if (!rootFrame.Navigate(typeof(LoadingPage), args.Arguments)) { throw new Exception("Failed to create initial page"); } @@ -80,10 +80,22 @@ namespace DrumKit /// /// The source of the suspend request. /// Details about the suspend request. - private void OnSuspending(object sender, SuspendingEventArgs e) + private async void OnSuspending(object sender, SuspendingEventArgs e) { var deferral = e.SuspendingOperation.GetDeferral(); //TODO: Save application state and stop any background activity + try { + await DataManager.Close(); + } + + catch (Exception ex) { + Log.Error("Exception in OnSuspending method!"); + Log.Except(ex); + } + + Log.Write("Application suspended."); + + //TODO:::... deferral.Complete(); } } diff --git a/DrumKit/Archiving/TarballReader.cs b/DrumKit/Archiving/TarballReader.cs new file mode 100644 index 0000000..7e0bba1 --- /dev/null +++ b/DrumKit/Archiving/TarballReader.cs @@ -0,0 +1,328 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using Windows.Storage; + +namespace DrumKit.Archiving +{ + public class TarballReader + { + #region Data types etc + /// + /// Tarball header structure + /// + private struct TarballHeader + { + public string FileName; + public uint FileMode; + public uint OwnerId, GroupId; + public int Size; + public DateTime LastModified; + public uint Checksum; + public byte LinkIndicator; + public string LinkedFile; + } + #endregion + + #region Private attributes + private Stream stream; + private TarballHeader header; + #endregion + + #region Constructor + /// + /// Creates a new instance of a tarball archive reader. + /// + public TarballReader() + { + stream = null; + header = new TarballHeader(); + } + + #endregion + + #region Public functions (unpack) + /// + /// Unpacks a tarball in a temporary folder. + /// + /// An URI to the tarball file. + /// Storage folder pointing to where the files were unpacked. + public async Task Unpack (Uri file) + { + var stfile = await StorageFile.GetFileFromApplicationUriAsync(file); + return await this.Unpack(stfile); + } + + /// + /// Unpacks a tarball in a specified folder. + /// + /// An URI to the tarball file. + /// A folder where files will be unpacked. + /// Storage folder pointing to where the files were unpacked. + public async Task Unpack(Uri file, StorageFolder destination) + { + var stfile = await StorageFile.GetFileFromApplicationUriAsync(file); + return await this.Unpack(stfile, destination); + } + + /// + /// Unpacks a tarball in a temporary folder. + /// + /// A path to the tarball file. + /// Storage folder pointing to where the files were unpacked. + public async Task Unpack(string file) + { + var stfile = await StorageFile.GetFileFromPathAsync(file); + return await this.Unpack(stfile); + } + + + /// + /// Unpacks a tarball in a specified folder. + /// + /// A path to the tarball file. + /// A folder where files will be unpacked. + /// Storage folder pointing to where the files were unpacked. + public async Task Unpack(string file, StorageFolder destination) + { + var stfile = await StorageFile.GetFileFromPathAsync(file); + return await this.Unpack(stfile, destination); + } + + + /// + /// Unpacks a tarball in a temporary folder. + /// + /// The tarball file. + /// Storage folder pointing to where the files were unpacked. + public async Task Unpack(StorageFile file) + { + // Prepare temp folder + var dest = await this.CreateTempFolder(); + + // Unpack + await this.Initialize(file); + await this.UnpackFiles(dest); + this.Dispose(); + + // Results + return dest; + } + + /// + /// Unpacks a tarball in a specified folder. + /// + /// The tarball file. + /// A folder where files will be unpacked. + /// Storage folder pointing to where the files were unpacked. + public async Task Unpack(StorageFile file, StorageFolder destination) + { + // Unpack + await this.Initialize(file); + await this.UnpackFiles(destination); + this.Dispose(); + + // Results + return destination; + } + + #endregion + + #region Initialize, dispose + /// + /// Performs initialization actions before unpacking (such as opening the stream). + /// + private async Task Initialize(StorageFile file) + { + var str = await file.OpenReadAsync(); + this.stream = str.AsStream(); + } + + /// + /// Performs cleanups after unpacking finished. + /// + private void Dispose() + { + // Clean up + this.stream.Dispose(); + this.stream = null; + + this.header = new TarballHeader(); + } + #endregion + + #region Headers + /// + /// Calculates the checksum from a header. + /// + /// The header bytes + private uint CalculateChecksum(byte[] buffer) + { + uint result = 0; + + // Calculate sum of all bytes, with the exception of bytes 148-155 + // (checksum field). These are all assumed to be 0x20. + for (int i = 0; i < buffer.Length; i++) + if (i >= 148 && i < 156) + result += 0x20; + else result += Convert.ToUInt32(buffer[i]); + + // Done + return result; + } + + /// + /// Converts binary data to a TarballHeader. + /// + private TarballHeader ParseHeaderFields(byte[] buffer) + { + TarballHeader header = new TarballHeader(); + string temp; + + // File name + temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 0, 100).Trim('\0', ' '); + header.FileName = temp; + + // File mode + temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 100, 8).Trim('\0', ' '); + header.FileMode = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToUInt32(temp, 8); + + // Owner id + temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 108, 8).Trim('\0', ' '); + header.OwnerId = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToUInt32(temp, 8); + + // Group id + temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 116, 8).Trim('\0', ' '); + header.GroupId = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToUInt32(temp, 8); + + // Size + temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 124, 12).Trim('\0', ' '); + header.Size = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToInt32(temp, 8); + + // Last modified date + temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 136, 12).Trim('\0', ' '); + int seconds = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToInt32(temp, 8); + header.LastModified = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(seconds).ToLocalTime(); + + // Checksum + temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 148, 8).Trim('\0', ' '); + header.Checksum = (string.IsNullOrEmpty(temp)) ? 0 : Convert.ToUInt32(temp, 8); + + // Link indicator + header.LinkIndicator = buffer[156]; + + // Linked file + temp = SharpDX.Text.ASCIIEncoding.ASCII.GetString(buffer, 157, 100).Trim('\0', ' '); + header.LinkedFile = temp; + + // Done + return header; + } + + /// + /// Reads a file header. + /// + /// True if another header was read, false otherwise. + private async Task ReadNextFileHeader() + { + byte[] buffer = new byte[512]; + + // Check current position + if (stream.Position >= stream.Length) + return false; + + // Read header + await stream.ReadAsync(buffer, 0, 512); + + // Parse header fields + this.header = this.ParseHeaderFields(buffer); + + // Verify checksum + uint checksum = this.CalculateChecksum(buffer); + + if (checksum == 256) // If 256 (only the checksum bytes different than 0), then + return false; // we most likely hit an invalid entry, probably marking the + // end of the file + if (checksum != header.Checksum) + throw new IOException("Invalid checksum!"); + + // Done + return true; + } + + #endregion + + #region File system helpers + /// + /// Creates a temporary folder. + /// + private async Task CreateTempFolder() + { + // Generate file name + string name = "tar" + DateTime.Now.Ticks.ToString(); + + // Create file + var temp = ApplicationData.Current.TemporaryFolder; + return await temp.CreateFolderAsync(name, CreationCollisionOption.GenerateUniqueName); + } + + #endregion + + #region Unpack + /// + /// Unpacks a file using the information from the header. + /// The function assumes the header was previously read. + /// + /// The destination file. + private async Task UnpackNextFile(StorageFile destination) + { + // Open destination file + var str = await destination.OpenAsync(FileAccessMode.ReadWrite); + var iostr = str.AsStream(); + + // Write data + var buffer = new byte[512]; + int read = 0, total = 0; + + while (total < this.header.Size) + { + read = await this.stream.ReadAsync(buffer, 0, 512); + await iostr.WriteAsync(buffer, 0, Math.Min(read, this.header.Size - total)); + total += read; + } + + // Cleanup + await iostr.FlushAsync(); + iostr.Dispose(); + } + + /// + /// Unpacks the files from the loaded tarball. + /// + /// Destination folder. + private async Task UnpackFiles(StorageFolder destination) + { + if (this.stream == null) + throw new ArgumentNullException("No file opened!"); + + while (await this.ReadNextFileHeader()) + { + // Directory? + if (this.header.FileName.EndsWith("/")) + await IOHelper.CreateFolderRelativeAsync(destination, this.header.FileName); + + // Create file + else + { + var file = await IOHelper.CreateFileRelativeAsync(destination, this.header.FileName); + await this.UnpackNextFile(file); + } + } + } + #endregion + + } +} diff --git a/DrumKit/Assets/ApplicationData.tar b/DrumKit/Assets/ApplicationData.tar new file mode 100644 index 0000000..9f703fa Binary files /dev/null and b/DrumKit/Assets/ApplicationData.tar differ diff --git a/DrumKit/Assets/Drums/big_drum_of.png b/DrumKit/Assets/Drums/big_drum_of.png deleted file mode 100644 index 412a66d..0000000 Binary files a/DrumKit/Assets/Drums/big_drum_of.png and /dev/null differ diff --git a/DrumKit/Assets/Drums/big_drum_on.png b/DrumKit/Assets/Drums/big_drum_on.png deleted file mode 100644 index 2ef7180..0000000 Binary files a/DrumKit/Assets/Drums/big_drum_on.png and /dev/null differ diff --git a/DrumKit/Assets/Drums/drum_of.png b/DrumKit/Assets/Drums/drum_of.png deleted file mode 100644 index fbf9357..0000000 Binary files a/DrumKit/Assets/Drums/drum_of.png and /dev/null differ diff --git a/DrumKit/Assets/Drums/drum_on.png b/DrumKit/Assets/Drums/drum_on.png deleted file mode 100644 index 36c66cb..0000000 Binary files a/DrumKit/Assets/Drums/drum_on.png and /dev/null differ diff --git a/DrumKit/Assets/Drums/plate_off.png b/DrumKit/Assets/Drums/plate_off.png deleted file mode 100644 index ea8fe3c..0000000 Binary files a/DrumKit/Assets/Drums/plate_off.png and /dev/null differ diff --git a/DrumKit/Assets/Drums/plate_on.png b/DrumKit/Assets/Drums/plate_on.png deleted file mode 100644 index 88f4865..0000000 Binary files a/DrumKit/Assets/Drums/plate_on.png and /dev/null differ diff --git a/DrumKit/Assets/Logos/BadgeIcon.png b/DrumKit/Assets/Logos/BadgeIcon.png new file mode 100644 index 0000000..8d79354 Binary files /dev/null and b/DrumKit/Assets/Logos/BadgeIcon.png differ diff --git a/DrumKit/Assets/Logos/Logo.png b/DrumKit/Assets/Logos/Logo.png index e26771c..11f7dd8 100644 Binary files a/DrumKit/Assets/Logos/Logo.png and b/DrumKit/Assets/Logos/Logo.png differ diff --git a/DrumKit/Assets/Logos/SmallLogo.png b/DrumKit/Assets/Logos/SmallLogo.png index 1eb0d9d..4716852 100644 Binary files a/DrumKit/Assets/Logos/SmallLogo.png and b/DrumKit/Assets/Logos/SmallLogo.png differ diff --git a/DrumKit/Assets/Logos/SplashScreen.png b/DrumKit/Assets/Logos/SplashScreen.png deleted file mode 100644 index c951e03..0000000 Binary files a/DrumKit/Assets/Logos/SplashScreen.png and /dev/null differ diff --git a/DrumKit/Assets/Logos/SplashScreen.scale-100.png b/DrumKit/Assets/Logos/SplashScreen.scale-100.png new file mode 100644 index 0000000..47ff3ac Binary files /dev/null and b/DrumKit/Assets/Logos/SplashScreen.scale-100.png differ diff --git a/DrumKit/Assets/Logos/SplashScreen.scale-140.png b/DrumKit/Assets/Logos/SplashScreen.scale-140.png new file mode 100644 index 0000000..09d6efe Binary files /dev/null and b/DrumKit/Assets/Logos/SplashScreen.scale-140.png differ diff --git a/DrumKit/Assets/Logos/SplashScreen.scale-180.png b/DrumKit/Assets/Logos/SplashScreen.scale-180.png new file mode 100644 index 0000000..af2e5b7 Binary files /dev/null and b/DrumKit/Assets/Logos/SplashScreen.scale-180.png differ diff --git a/DrumKit/Assets/Logos/StoreLogo.png b/DrumKit/Assets/Logos/StoreLogo.png index dcb6727..af8bdfc 100644 Binary files a/DrumKit/Assets/Logos/StoreLogo.png and b/DrumKit/Assets/Logos/StoreLogo.png differ diff --git a/DrumKit/Assets/Logos/WideLogo.png b/DrumKit/Assets/Logos/WideLogo.png new file mode 100644 index 0000000..98ee0e5 Binary files /dev/null and b/DrumKit/Assets/Logos/WideLogo.png differ diff --git a/DrumKit/Assets/default b/DrumKit/Assets/default deleted file mode 100644 index c0aeb56..0000000 --- a/DrumKit/Assets/default +++ /dev/null @@ -1,40 +0,0 @@ -[Kick] - position=.41,.2 - size=.3 - image=ms-appx:///Assets/Drums/big_drum_of.png - sound,0=ms-appx:///Assets/Sounds/Kick07.wav -[Snare] - position=.16,.34 - size=.25 - image=ms-appx:///Assets/Drums/drum_of.png - sound,0=ms-appx:///Assets/Sounds/Snare08.wav -[High Tom] - position=.33,.05 - size=.22 - image=ms-appx:///Assets/Drums/drum_of.png - sound,0=ms-appx:///Assets/Sounds/TomHigh04.wav -[Low Tom] - position=.55,.05 - size=.22 - image=ms-appx:///Assets/Drums/drum_of.png - sound,0=ms-appx:///Assets/Sounds/TomLow04.wav -[Floor Tom] - position=.66,.44 - size=.29 - image=ms-appx:///Assets/Drums/drum_of.png - sound,0=ms-appx:///Assets/Sounds/Floor04.wav -[HiHat] - position=.03,.55 - size=.21 - image=ms-appx:///Assets/Drums/plate_off.png - sound,0=ms-appx:///Assets/Sounds/HiHatOpen04.wav -[Crash] - position=.1,.02 - size=.25 - image=ms-appx:///Assets/Drums/plate_off.png - sound,0=ms-appx:///Assets/Sounds/Crash05.wav -[Ride] - position=.72,.04 - size=.25 - image=ms-appx:///Assets/Drums/plate_off.png - sound,0=ms-appx:///Assets/Sounds/Ride04.wav diff --git a/DrumKit/Build/7z.exe b/DrumKit/Build/7z.exe new file mode 100644 index 0000000..b55fefe Binary files /dev/null and b/DrumKit/Build/7z.exe differ diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drum.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drum.png new file mode 100644 index 0000000..fdcf9c8 Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drum.png differ diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drumPressed.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drumPressed.png new file mode 100644 index 0000000..6907b4b Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/drumPressed.png differ diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kick.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kick.png new file mode 100644 index 0000000..629a8e3 Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kick.png differ diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kickPressed.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kickPressed.png new file mode 100644 index 0000000..a8becda Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/kickPressed.png differ diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedal.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedal.png new file mode 100644 index 0000000..efedadb Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedal.png differ diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedalPressed.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedalPressed.png new file mode 100644 index 0000000..cd75c96 Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/pedalPressed.png differ diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/plate.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/plate.png new file mode 100644 index 0000000..9257735 Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/plate.png differ diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Images/platePressed.png b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/platePressed.png new file mode 100644 index 0000000..8935060 Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Images/platePressed.png differ diff --git a/DrumKit/Assets/Sounds/Crash05.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Crash05.wav similarity index 100% rename from DrumKit/Assets/Sounds/Crash05.wav rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Crash05.wav diff --git a/DrumKit/Assets/Sounds/Floor04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Floor04.wav similarity index 100% rename from DrumKit/Assets/Sounds/Floor04.wav rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Floor04.wav diff --git a/DrumKit/Assets/Sounds/Hat04.WAV b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Hat04.WAV similarity index 100% rename from DrumKit/Assets/Sounds/Hat04.WAV rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Hat04.WAV diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/HiHatClosed04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/HiHatClosed04.wav new file mode 100644 index 0000000..34e2c82 Binary files /dev/null and b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/HiHatClosed04.wav differ diff --git a/DrumKit/Assets/Sounds/HiHatOpen04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/HiHatOpen04.wav similarity index 100% rename from DrumKit/Assets/Sounds/HiHatOpen04.wav rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/HiHatOpen04.wav diff --git a/DrumKit/Assets/Sounds/Kick07.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Kick07.wav similarity index 100% rename from DrumKit/Assets/Sounds/Kick07.wav rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Kick07.wav diff --git a/DrumKit/Assets/Sounds/Ride04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Ride04.wav similarity index 100% rename from DrumKit/Assets/Sounds/Ride04.wav rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Ride04.wav diff --git a/DrumKit/Assets/Sounds/Snare08.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Snare08.wav similarity index 100% rename from DrumKit/Assets/Sounds/Snare08.wav rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/Snare08.wav diff --git a/DrumKit/Assets/Sounds/TomHigh04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/TomHigh04.wav similarity index 100% rename from DrumKit/Assets/Sounds/TomHigh04.wav rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/TomHigh04.wav diff --git a/DrumKit/Assets/Sounds/TomLow04.wav b/DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/TomLow04.wav similarity index 100% rename from DrumKit/Assets/Sounds/TomLow04.wav rename to DrumKit/Build/ApplicationData/Drumkits/Default/Sounds/TomLow04.wav diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/config.xml b/DrumKit/Build/ApplicationData/Drumkits/Default/config.xml new file mode 100644 index 0000000..21313ba --- /dev/null +++ b/DrumKit/Build/ApplicationData/Drumkits/Default/config.xml @@ -0,0 +1,41 @@ + + + + + 1.0 + A + + + 1.0 + B + + + 1.0 + C + + + 1.0 + D + + + 1.0 + E + + + 1.0 + F + + + 1.0 + G + + + 1.0 + H + + + 1.0 + I + + + \ No newline at end of file diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/drumkit.xml b/DrumKit/Build/ApplicationData/Drumkits/Default/drumkit.xml new file mode 100644 index 0000000..4f5d85a --- /dev/null +++ b/DrumKit/Build/ApplicationData/Drumkits/Default/drumkit.xml @@ -0,0 +1,144 @@ + + + + + + Default + Default drums + + + config.xml + layout.xml + + + + + Kick + Images/kick.png + Images/kickPressed.png + + Sounds/Kick07.wav + + + + + Snare + Images/drum.png + Images/drumPressed.png + + Sounds/Snare08.wav + + + + + High Tom + Images/drum.png + Images/drumPressed.png + + Sounds/TomHigh04.wav + + + + + Low Tom + Images/drum.png + Images/drumPressed.png + + Sounds/TomLow04.wav + + + + + Floor Tom + Images/drum.png + Images/drumPressed.png + + Sounds/Floor04.wav + + + + + Hi-Hat Closed (pedal) + Images/pedal.png + Images/pedalPressed.png + + Sounds/HiHatClosed04.wav + + + + + Hi-Hat Opened + Images/plate.png + Images/platePressed.png + + Sounds/HiHatOpen04.wav + + + + + Crash + Images/plate.png + Images/platePressed.png + + Sounds/Crash05.wav + + + + + Ride + Images/plate.png + Images/platePressed.png + + Sounds/Ride04.wav + + + + + + + \ No newline at end of file diff --git a/DrumKit/Build/ApplicationData/Drumkits/Default/layout.xml b/DrumKit/Build/ApplicationData/Drumkits/Default/layout.xml new file mode 100644 index 0000000..e97306b --- /dev/null +++ b/DrumKit/Build/ApplicationData/Drumkits/Default/layout.xml @@ -0,0 +1,77 @@ + + + + + + + + Standard layout + Snapped|Landscape|Filled|Portrait + true + + + + .3 + .41 + .2 + 0 + + + .25 + .16 + .34 + 2 + 61 + + + .22 + .33 + .05 + 1 + 150 + + + .22 + .55 + .05 + 1 + 150 + + + .29 + .66 + .44 + 1 + -30 + + + .055 + .11 + .89 + 3 + + + .21 + .03 + .55 + 4 + 80 + + + .26 + .1 + .02 + 4 + 80 + + + .25 + .72 + .04 + 4 + + + + + + \ No newline at end of file diff --git a/DrumKit/Common/StandardStyles.xaml b/DrumKit/Common/StandardStyles.xaml index 6ad467a..975f119 100644 --- a/DrumKit/Common/StandardStyles.xaml +++ b/DrumKit/Common/StandardStyles.xaml @@ -424,7 +424,13 @@ -