Build 121209
							
								
								
									
										20
									
								
								DrumKit/App.xaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,20 @@
 | 
			
		||||
<Application
 | 
			
		||||
    x:Class="DrumKit.App"
 | 
			
		||||
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 | 
			
		||||
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 | 
			
		||||
    xmlns:local="using:DrumKit">
 | 
			
		||||
 | 
			
		||||
    <Application.Resources>
 | 
			
		||||
        <ResourceDictionary>
 | 
			
		||||
            <ResourceDictionary.MergedDictionaries>
 | 
			
		||||
 | 
			
		||||
                <!-- 
 | 
			
		||||
                    Styles that define common aspects of the platform look and feel
 | 
			
		||||
                    Required by Visual Studio project and item templates
 | 
			
		||||
                 -->
 | 
			
		||||
                <ResourceDictionary Source="Common/StandardStyles.xaml"/>
 | 
			
		||||
            </ResourceDictionary.MergedDictionaries>
 | 
			
		||||
 | 
			
		||||
        </ResourceDictionary>
 | 
			
		||||
    </Application.Resources>
 | 
			
		||||
</Application>
 | 
			
		||||
							
								
								
									
										90
									
								
								DrumKit/App.xaml.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,90 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Windows.ApplicationModel;
 | 
			
		||||
using Windows.ApplicationModel.Activation;
 | 
			
		||||
using Windows.Foundation;
 | 
			
		||||
using Windows.Foundation.Collections;
 | 
			
		||||
using Windows.UI.Xaml;
 | 
			
		||||
using Windows.UI.Xaml.Controls;
 | 
			
		||||
using Windows.UI.Xaml.Controls.Primitives;
 | 
			
		||||
using Windows.UI.Xaml.Data;
 | 
			
		||||
using Windows.UI.Xaml.Input;
 | 
			
		||||
using Windows.UI.Xaml.Media;
 | 
			
		||||
using Windows.UI.Xaml.Navigation;
 | 
			
		||||
 | 
			
		||||
// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227
 | 
			
		||||
 | 
			
		||||
namespace DrumKit
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Provides application-specific behavior to supplement the default Application class.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    sealed partial class App : Application
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes the singleton application object.  This is the first line of authored code
 | 
			
		||||
        /// executed, and as such is the logical equivalent of main() or WinMain().
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public App()
 | 
			
		||||
        {
 | 
			
		||||
            this.InitializeComponent();
 | 
			
		||||
            this.Suspending += OnSuspending;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Invoked when the application is launched normally by the end user.  Other entry points
 | 
			
		||||
        /// will be used when the application is launched to open a specific file, to display
 | 
			
		||||
        /// search results, and so forth.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="args">Details about the launch request and process.</param>
 | 
			
		||||
        protected override void OnLaunched(LaunchActivatedEventArgs args)
 | 
			
		||||
        {
 | 
			
		||||
            Frame rootFrame = Window.Current.Content as Frame;
 | 
			
		||||
 | 
			
		||||
            // Do not repeat app initialization when the Window already has content,
 | 
			
		||||
            // just ensure that the window is active
 | 
			
		||||
            if (rootFrame == null)
 | 
			
		||||
            {
 | 
			
		||||
                // Create a Frame to act as the navigation context and navigate to the first page
 | 
			
		||||
                rootFrame = new Frame();
 | 
			
		||||
 | 
			
		||||
                if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
 | 
			
		||||
                {
 | 
			
		||||
                    //TODO: Load state from previously suspended application
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Place the frame in the current Window
 | 
			
		||||
                Window.Current.Content = rootFrame;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (rootFrame.Content == null)
 | 
			
		||||
            {
 | 
			
		||||
                // 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))
 | 
			
		||||
                {
 | 
			
		||||
                    throw new Exception("Failed to create initial page");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // Ensure the current window is active
 | 
			
		||||
            Window.Current.Activate();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Invoked when application execution is being suspended.  Application state is saved
 | 
			
		||||
        /// without knowing whether the application will be terminated or resumed with the contents
 | 
			
		||||
        /// of memory still intact.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="sender">The source of the suspend request.</param>
 | 
			
		||||
        /// <param name="e">Details about the suspend request.</param>
 | 
			
		||||
        private void OnSuspending(object sender, SuspendingEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            var deferral = e.SuspendingOperation.GetDeferral();
 | 
			
		||||
            //TODO: Save application state and stop any background activity
 | 
			
		||||
            deferral.Complete();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Drums/big_drum_of.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 40 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Drums/big_drum_on.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 37 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Drums/drum_of.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 230 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Drums/drum_on.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 228 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Drums/plate_off.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 515 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Drums/plate_on.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 372 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Logos/Logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 801 B  | 
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Logos/SmallLogo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 329 B  | 
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Logos/SplashScreen.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Logos/StoreLogo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 429 B  | 
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Sounds/Crash05.wav
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Sounds/Floor04.wav
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Sounds/Hat04.WAV
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Sounds/HiHatOpen04.wav
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Sounds/Kick07.wav
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Sounds/Ride04.wav
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Sounds/Snare08.wav
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Sounds/TomHigh04.wav
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/Sounds/TomLow04.wav
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								DrumKit/Assets/bg.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 838 KiB  | 
							
								
								
									
										40
									
								
								DrumKit/Assets/default
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,40 @@
 | 
			
		||||
[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
 | 
			
		||||
							
								
								
									
										1833
									
								
								DrumKit/Common/StandardStyles.xaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										107
									
								
								DrumKit/Drum.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,107 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Windows.Foundation;
 | 
			
		||||
using Windows.Foundation.Collections;
 | 
			
		||||
using Windows.UI.Xaml;
 | 
			
		||||
using Windows.UI.Xaml.Controls;
 | 
			
		||||
using Windows.UI.Xaml.Controls.Primitives;
 | 
			
		||||
using Windows.UI.Xaml.Data;
 | 
			
		||||
using Windows.UI.Xaml.Input;
 | 
			
		||||
using Windows.UI.Xaml.Media;
 | 
			
		||||
using Windows.UI.Xaml.Media.Imaging;
 | 
			
		||||
using Windows.UI.Xaml.Navigation;
 | 
			
		||||
 | 
			
		||||
namespace DrumKit
 | 
			
		||||
{
 | 
			
		||||
    class Drum
 | 
			
		||||
    {
 | 
			
		||||
        #region Attributes
 | 
			
		||||
        private Uri imageSource;
 | 
			
		||||
        private Point position;
 | 
			
		||||
        private double size;
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Public properties
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the name of the drum.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Name { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the image uri. If enabled, the image is loaded.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Uri ImageSource {
 | 
			
		||||
            get { return this.imageSource; } 
 | 
			
		||||
            set { this.SetImageSource(value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the position of the element on the screen.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Point Position { 
 | 
			
		||||
            get { return this.position; }
 | 
			
		||||
            set { this.SetPosition(value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets the size of the image displayed on the screen.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public double Size {
 | 
			
		||||
            get { return this.size; }
 | 
			
		||||
            set { this.size = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Sound sources
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Dictionary<int, Uri> SoundSources
 | 
			
		||||
        {
 | 
			
		||||
            get;
 | 
			
		||||
            private set;
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructor
 | 
			
		||||
        public Drum()
 | 
			
		||||
        {
 | 
			
		||||
            // Initialize sources
 | 
			
		||||
            this.SoundSources = new Dictionary<int, Uri>();
 | 
			
		||||
            this.imageSource = null;
 | 
			
		||||
 | 
			
		||||
            // Set up other vars
 | 
			
		||||
            this.position = new Point(0, 0);
 | 
			
		||||
            this.size = 0;
 | 
			
		||||
            this.Name = "<unnamed>";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Setters
 | 
			
		||||
        public void SetImageSource(Uri imagesrc)
 | 
			
		||||
        {
 | 
			
		||||
            // Set property
 | 
			
		||||
            this.imageSource = imagesrc;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetPosition(Point location)
 | 
			
		||||
        {
 | 
			
		||||
            // Set property
 | 
			
		||||
            this.position = location;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetSoundSource(int intensity, Uri source)
 | 
			
		||||
        {
 | 
			
		||||
            // Set up sound source
 | 
			
		||||
            if (this.SoundSources.ContainsKey(intensity))
 | 
			
		||||
                this.SoundSources[intensity] = source;
 | 
			
		||||
 | 
			
		||||
            else this.SoundSources.Add(intensity, source);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										181
									
								
								DrumKit/DrumKit.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,181 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
 | 
			
		||||
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
 | 
			
		||||
    <ProjectGuid>{9A5D3F55-DFD5-45DB-99FF-C82EFCC3294D}</ProjectGuid>
 | 
			
		||||
    <OutputType>AppContainerExe</OutputType>
 | 
			
		||||
    <AppDesignerFolder>Properties</AppDesignerFolder>
 | 
			
		||||
    <RootNamespace>DrumKit</RootNamespace>
 | 
			
		||||
    <AssemblyName>DrumKit</AssemblyName>
 | 
			
		||||
    <DefaultLanguage>en-US</DefaultLanguage>
 | 
			
		||||
    <FileAlignment>512</FileAlignment>
 | 
			
		||||
    <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
 | 
			
		||||
    <PackageCertificateKeyFile>DrumKit_TemporaryKey.pfx</PackageCertificateKeyFile>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
 | 
			
		||||
    <PlatformTarget>AnyCPU</PlatformTarget>
 | 
			
		||||
    <DebugSymbols>true</DebugSymbols>
 | 
			
		||||
    <DebugType>full</DebugType>
 | 
			
		||||
    <Optimize>false</Optimize>
 | 
			
		||||
    <OutputPath>bin\Debug\</OutputPath>
 | 
			
		||||
    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>
 | 
			
		||||
    <ErrorReport>prompt</ErrorReport>
 | 
			
		||||
    <WarningLevel>4</WarningLevel>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
 | 
			
		||||
    <PlatformTarget>AnyCPU</PlatformTarget>
 | 
			
		||||
    <DebugType>pdbonly</DebugType>
 | 
			
		||||
    <Optimize>true</Optimize>
 | 
			
		||||
    <OutputPath>bin\Release\</OutputPath>
 | 
			
		||||
    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>
 | 
			
		||||
    <ErrorReport>prompt</ErrorReport>
 | 
			
		||||
    <WarningLevel>4</WarningLevel>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
 | 
			
		||||
    <DebugSymbols>true</DebugSymbols>
 | 
			
		||||
    <OutputPath>bin\ARM\Debug\</OutputPath>
 | 
			
		||||
    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>
 | 
			
		||||
    <NoWarn>;2008</NoWarn>
 | 
			
		||||
    <DebugType>full</DebugType>
 | 
			
		||||
    <PlatformTarget>ARM</PlatformTarget>
 | 
			
		||||
    <UseVSHostingProcess>false</UseVSHostingProcess>
 | 
			
		||||
    <ErrorReport>prompt</ErrorReport>
 | 
			
		||||
    <Prefer32Bit>true</Prefer32Bit>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
 | 
			
		||||
    <OutputPath>bin\ARM\Release\</OutputPath>
 | 
			
		||||
    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>
 | 
			
		||||
    <Optimize>true</Optimize>
 | 
			
		||||
    <NoWarn>;2008</NoWarn>
 | 
			
		||||
    <DebugType>pdbonly</DebugType>
 | 
			
		||||
    <PlatformTarget>ARM</PlatformTarget>
 | 
			
		||||
    <UseVSHostingProcess>false</UseVSHostingProcess>
 | 
			
		||||
    <ErrorReport>prompt</ErrorReport>
 | 
			
		||||
    <Prefer32Bit>true</Prefer32Bit>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
 | 
			
		||||
    <DebugSymbols>true</DebugSymbols>
 | 
			
		||||
    <OutputPath>bin\x64\Debug\</OutputPath>
 | 
			
		||||
    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>
 | 
			
		||||
    <NoWarn>;2008</NoWarn>
 | 
			
		||||
    <DebugType>full</DebugType>
 | 
			
		||||
    <PlatformTarget>x64</PlatformTarget>
 | 
			
		||||
    <UseVSHostingProcess>false</UseVSHostingProcess>
 | 
			
		||||
    <ErrorReport>prompt</ErrorReport>
 | 
			
		||||
    <Prefer32Bit>true</Prefer32Bit>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
 | 
			
		||||
    <OutputPath>bin\x64\Release\</OutputPath>
 | 
			
		||||
    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>
 | 
			
		||||
    <Optimize>true</Optimize>
 | 
			
		||||
    <NoWarn>;2008</NoWarn>
 | 
			
		||||
    <DebugType>pdbonly</DebugType>
 | 
			
		||||
    <PlatformTarget>x64</PlatformTarget>
 | 
			
		||||
    <UseVSHostingProcess>false</UseVSHostingProcess>
 | 
			
		||||
    <ErrorReport>prompt</ErrorReport>
 | 
			
		||||
    <Prefer32Bit>true</Prefer32Bit>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
 | 
			
		||||
    <DebugSymbols>true</DebugSymbols>
 | 
			
		||||
    <OutputPath>bin\x86\Debug\</OutputPath>
 | 
			
		||||
    <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants>
 | 
			
		||||
    <NoWarn>;2008</NoWarn>
 | 
			
		||||
    <DebugType>full</DebugType>
 | 
			
		||||
    <PlatformTarget>x86</PlatformTarget>
 | 
			
		||||
    <UseVSHostingProcess>false</UseVSHostingProcess>
 | 
			
		||||
    <ErrorReport>prompt</ErrorReport>
 | 
			
		||||
    <Prefer32Bit>true</Prefer32Bit>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
 | 
			
		||||
    <OutputPath>bin\x86\Release\</OutputPath>
 | 
			
		||||
    <DefineConstants>TRACE;NETFX_CORE</DefineConstants>
 | 
			
		||||
    <Optimize>true</Optimize>
 | 
			
		||||
    <NoWarn>;2008</NoWarn>
 | 
			
		||||
    <DebugType>pdbonly</DebugType>
 | 
			
		||||
    <PlatformTarget>x86</PlatformTarget>
 | 
			
		||||
    <UseVSHostingProcess>false</UseVSHostingProcess>
 | 
			
		||||
    <ErrorReport>prompt</ErrorReport>
 | 
			
		||||
    <Prefer32Bit>true</Prefer32Bit>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Include="App.xaml.cs">
 | 
			
		||||
      <DependentUpon>App.xaml</DependentUpon>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="Drum.cs" />
 | 
			
		||||
    <Compile Include="MainPage.xaml.cs">
 | 
			
		||||
      <DependentUpon>MainPage.xaml</DependentUpon>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="Recorder.cs" />
 | 
			
		||||
    <Compile Include="Repository\DrumRepository.cs" />
 | 
			
		||||
    <Compile Include="SoundPlayer.cs" />
 | 
			
		||||
    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
			
		||||
    <Compile Include="SoundPool.cs" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <AppxManifest Include="Package.appxmanifest">
 | 
			
		||||
      <SubType>Designer</SubType>
 | 
			
		||||
    </AppxManifest>
 | 
			
		||||
    <None Include="DrumKit_TemporaryKey.pfx" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Content Include="Assets\bg.png" />
 | 
			
		||||
    <Content Include="Assets\Drums\big_drum_of.png" />
 | 
			
		||||
    <Content Include="Assets\Drums\big_drum_on.png" />
 | 
			
		||||
    <Content Include="Assets\Drums\drum_of.png" />
 | 
			
		||||
    <Content Include="Assets\Drums\drum_on.png" />
 | 
			
		||||
    <Content Include="Assets\Sounds\Crash05.wav" />
 | 
			
		||||
    <Content Include="Assets\Sounds\Hat04.WAV" />
 | 
			
		||||
    <Content Include="Assets\Sounds\HiHatOpen04.wav" />
 | 
			
		||||
    <Content Include="Assets\Sounds\Kick07.wav" />
 | 
			
		||||
    <Content Include="Assets\default">
 | 
			
		||||
      <SubType>Designer</SubType>
 | 
			
		||||
    </Content>
 | 
			
		||||
    <Content Include="Assets\Logos\Logo.png" />
 | 
			
		||||
    <Content Include="Assets\Logos\SmallLogo.png" />
 | 
			
		||||
    <Content Include="Assets\Logos\SplashScreen.png" />
 | 
			
		||||
    <Content Include="Assets\Logos\StoreLogo.png" />
 | 
			
		||||
    <Content Include="Assets\Drums\plate_off.png" />
 | 
			
		||||
    <Content Include="Assets\Drums\plate_on.png" />
 | 
			
		||||
    <Content Include="Assets\Sounds\Ride04.wav" />
 | 
			
		||||
    <Content Include="Assets\Sounds\Snare08.wav" />
 | 
			
		||||
    <Content Include="Assets\Sounds\TomHigh04.wav" />
 | 
			
		||||
    <Content Include="Assets\Sounds\Floor04.wav" />
 | 
			
		||||
    <Content Include="Assets\Sounds\TomLow04.wav" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ApplicationDefinition Include="App.xaml">
 | 
			
		||||
      <Generator>MSBuild:Compile</Generator>
 | 
			
		||||
      <SubType>Designer</SubType>
 | 
			
		||||
    </ApplicationDefinition>
 | 
			
		||||
    <Page Include="Common\StandardStyles.xaml">
 | 
			
		||||
      <Generator>MSBuild:Compile</Generator>
 | 
			
		||||
      <SubType>Designer</SubType>
 | 
			
		||||
    </Page>
 | 
			
		||||
    <Page Include="MainPage.xaml">
 | 
			
		||||
      <Generator>MSBuild:Compile</Generator>
 | 
			
		||||
      <SubType>Designer</SubType>
 | 
			
		||||
    </Page>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Reference Include="SharpDX">
 | 
			
		||||
      <HintPath>C:\Users\Tiberiu\Downloads\SharpDX\Bin\Standard-winrt\SharpDX.dll</HintPath>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="SharpDX.XAudio2">
 | 
			
		||||
      <HintPath>C:\Users\Tiberiu\Downloads\SharpDX\Bin\Standard-winrt\SharpDX.XAudio2.dll</HintPath>
 | 
			
		||||
    </Reference>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup />
 | 
			
		||||
  <PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '11.0' ">
 | 
			
		||||
    <VisualStudioVersion>11.0</VisualStudioVersion>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
 | 
			
		||||
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
 | 
			
		||||
       Other similar extension points exist, see Microsoft.Common.targets.
 | 
			
		||||
  <Target Name="BeforeBuild">
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="AfterBuild">
 | 
			
		||||
  </Target>
 | 
			
		||||
  -->
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										6
									
								
								DrumKit/DrumKit.csproj.user
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,6 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
 | 
			
		||||
    <UseSimulator>False</UseSimulator>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										73
									
								
								DrumKit/MainPage.xaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,73 @@
 | 
			
		||||
<Page
 | 
			
		||||
    x:Class="DrumKit.MainPage"
 | 
			
		||||
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 | 
			
		||||
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 | 
			
		||||
    xmlns:local="using:DrumKit"
 | 
			
		||||
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 | 
			
		||||
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 | 
			
		||||
    mc:Ignorable="d">
 | 
			
		||||
 | 
			
		||||
    <Grid
 | 
			
		||||
        Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
 | 
			
		||||
    
 | 
			
		||||
        <Image Source="ms-appx:///Assets/bg.png"
 | 
			
		||||
               Stretch="UniformToFill"/>
 | 
			
		||||
        
 | 
			
		||||
        <Canvas
 | 
			
		||||
            Name="myCanvas" >
 | 
			
		||||
 | 
			
		||||
        </Canvas>
 | 
			
		||||
 | 
			
		||||
        <Grid>
 | 
			
		||||
            <Border Margin="7"
 | 
			
		||||
                    CornerRadius="10" 
 | 
			
		||||
                    BorderBrush="Red" 
 | 
			
		||||
                    BorderThickness="5" />
 | 
			
		||||
 | 
			
		||||
            <Canvas Name="recCanvas">
 | 
			
		||||
                <Ellipse Width="18" Height="18" Fill="Red"
 | 
			
		||||
                         Canvas.Left="20"
 | 
			
		||||
                         Canvas.Top="20"/>
 | 
			
		||||
                <TextBlock
 | 
			
		||||
                           FontFamily="Consolas"
 | 
			
		||||
                           FontSize="16"
 | 
			
		||||
                           Foreground="Red"
 | 
			
		||||
                           Canvas.Left="42"
 | 
			
		||||
                           Canvas.Top="19">REC
 | 
			
		||||
                </TextBlock>
 | 
			
		||||
                
 | 
			
		||||
                <Canvas.Triggers>
 | 
			
		||||
                    <EventTrigger RoutedEvent="Canvas.Loaded">
 | 
			
		||||
                        <BeginStoryboard>
 | 
			
		||||
                            <Storyboard RepeatBehavior="Forever" >
 | 
			
		||||
                                <DoubleAnimation
 | 
			
		||||
                                    Storyboard.TargetName="recCanvas"
 | 
			
		||||
                                    Storyboard.TargetProperty="Opacity"
 | 
			
		||||
                                    Duration="0:0:1" BeginTime="0:0:1" From="1" To="0.1" />
 | 
			
		||||
                            </Storyboard>
 | 
			
		||||
                        </BeginStoryboard>
 | 
			
		||||
                    </EventTrigger>
 | 
			
		||||
                </Canvas.Triggers>
 | 
			
		||||
            </Canvas>
 | 
			
		||||
            <!--<StackPanel Orientation="Horizontal"
 | 
			
		||||
                        HorizontalAlignment="Left"
 | 
			
		||||
                        VerticalAlignment="Top">
 | 
			
		||||
                <Button>Record</Button>
 | 
			
		||||
                <Button>Stop</Button>
 | 
			
		||||
            </StackPanel>-->
 | 
			
		||||
        </Grid>
 | 
			
		||||
 | 
			
		||||
    </Grid>
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    <Page.BottomAppBar>
 | 
			
		||||
        <AppBar>
 | 
			
		||||
            <StackPanel Orientation="Horizontal">
 | 
			
		||||
                <ToggleButton
 | 
			
		||||
                    Name="buttonEditMode"
 | 
			
		||||
                    Click="buttonEditMode_Click_1"
 | 
			
		||||
                    Style="{StaticResource EditAppBarButtonStyle}" />
 | 
			
		||||
            </StackPanel>
 | 
			
		||||
        </AppBar>
 | 
			
		||||
    </Page.BottomAppBar>
 | 
			
		||||
</Page>
 | 
			
		||||
							
								
								
									
										201
									
								
								DrumKit/MainPage.xaml.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,201 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Windows.Foundation;
 | 
			
		||||
using Windows.Foundation.Collections;
 | 
			
		||||
using Windows.UI.Xaml;
 | 
			
		||||
using Windows.UI.Xaml.Controls;
 | 
			
		||||
using Windows.UI.Xaml.Controls.Primitives;
 | 
			
		||||
using Windows.UI.Xaml.Data;
 | 
			
		||||
using Windows.UI.Xaml.Input;
 | 
			
		||||
using Windows.UI.Xaml.Media;
 | 
			
		||||
using Windows.UI.Xaml.Navigation;
 | 
			
		||||
 | 
			
		||||
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
 | 
			
		||||
 | 
			
		||||
namespace DrumKit
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// An empty page that can be used on its own or navigated to within a Frame.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public sealed partial class MainPage : Page
 | 
			
		||||
    {
 | 
			
		||||
        DrumRepository drumRepo;
 | 
			
		||||
        SoundPlayer player = new SoundPlayer();
 | 
			
		||||
        List<Image> uiImages;
 | 
			
		||||
        List<Button> uiButtons;
 | 
			
		||||
        List<Thumb> uiThumbs;
 | 
			
		||||
 | 
			
		||||
        public MainPage()
 | 
			
		||||
        {
 | 
			
		||||
            this.InitializeComponent();
 | 
			
		||||
 | 
			
		||||
            drumRepo = new DrumRepository();
 | 
			
		||||
 | 
			
		||||
            uiImages = new List<Image>();
 | 
			
		||||
            uiButtons = new List<Button>();
 | 
			
		||||
            uiThumbs = new List<Thumb>();
 | 
			
		||||
 | 
			
		||||
            this.InitializeResources();
 | 
			
		||||
            this.KeyDown += MainPage_KeyDown;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void MainPage_KeyDown(object sender, KeyRoutedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            string key = Enum.GetName(typeof(Windows.System.VirtualKey), e.Key);
 | 
			
		||||
 | 
			
		||||
            if (key != null && key.Length == 1)
 | 
			
		||||
            {
 | 
			
		||||
                int index = Convert.ToInt32(key.ToLower()[0] - 'a');
 | 
			
		||||
                if (this.uiButtons.Count > index)
 | 
			
		||||
                    this.DrumClicked(this.uiButtons[index], new RoutedEventArgs());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Image CreateImage(int index, Drum drum)
 | 
			
		||||
        {
 | 
			
		||||
            var img = new Image();
 | 
			
		||||
            var bitmap = new Windows.UI.Xaml.Media.Imaging.BitmapImage(drum.ImageSource);
 | 
			
		||||
            img.Tag = index.ToString(); 
 | 
			
		||||
            img.Source = bitmap;
 | 
			
		||||
            img.Width = drum.Size * this.ActualWidth;
 | 
			
		||||
            img.Height = drum.Size * this.ActualWidth;
 | 
			
		||||
 | 
			
		||||
            return img;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Button CreateButton(int index, Drum drum)
 | 
			
		||||
        {
 | 
			
		||||
            var button = new Button();
 | 
			
		||||
            button.Tag = index.ToString();
 | 
			
		||||
            button.Click += DrumClicked;
 | 
			
		||||
            button.Width = drum.Size * this.ActualWidth;
 | 
			
		||||
            button.Height = drum.Size * this.ActualWidth;
 | 
			
		||||
            button.Background = new SolidColorBrush(Windows.UI.Colors.Orange);
 | 
			
		||||
            button.Opacity = 0;
 | 
			
		||||
            
 | 
			
		||||
            return button;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Thumb CreateThumb(int index, Drum drum)
 | 
			
		||||
        {
 | 
			
		||||
            var thumb = new Thumb();
 | 
			
		||||
            thumb.Tag = index.ToString();
 | 
			
		||||
            thumb.DragDelta += DrumMoved;
 | 
			
		||||
            thumb.Width = drum.Size * this.ActualWidth;
 | 
			
		||||
            thumb.Height = drum.Size * this.ActualWidth;
 | 
			
		||||
            thumb.Opacity = .3;
 | 
			
		||||
            thumb.Background = new SolidColorBrush(Windows.UI.Colors.Green);
 | 
			
		||||
            thumb.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
 | 
			
		||||
 | 
			
		||||
            return thumb;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        async void InitializeResources()
 | 
			
		||||
        {
 | 
			
		||||
            await drumRepo.LoadFile(new Uri("ms-appx:///Assets/default"));
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < drumRepo.Drums.Count; i++)
 | 
			
		||||
            {
 | 
			
		||||
                var drum = drumRepo.Drums[i];
 | 
			
		||||
 | 
			
		||||
                // Get ui objects
 | 
			
		||||
                var img = CreateImage(i, drum);
 | 
			
		||||
                var button = CreateButton(i, drum);
 | 
			
		||||
                var thumb = CreateThumb(i, drum);
 | 
			
		||||
 | 
			
		||||
                // Set up layout
 | 
			
		||||
                this.myCanvas.Children.Add(img);
 | 
			
		||||
                this.myCanvas.Children.Add(button);
 | 
			
		||||
                this.myCanvas.Children.Add(thumb);
 | 
			
		||||
 | 
			
		||||
                Canvas.SetLeft(img, drum.Position.X * this.ActualWidth);
 | 
			
		||||
                Canvas.SetLeft(button, drum.Position.X * this.ActualWidth);
 | 
			
		||||
                Canvas.SetLeft(thumb, drum.Position.X * this.ActualWidth);
 | 
			
		||||
                Canvas.SetTop(img, drum.Position.Y * this.ActualHeight);
 | 
			
		||||
                Canvas.SetTop(button, drum.Position.Y * this.ActualHeight);
 | 
			
		||||
                Canvas.SetTop(thumb, drum.Position.Y * this.ActualHeight);
 | 
			
		||||
                Canvas.SetZIndex(img, 0);
 | 
			
		||||
                Canvas.SetZIndex(button, 1);
 | 
			
		||||
                Canvas.SetZIndex(thumb, 2);
 | 
			
		||||
 | 
			
		||||
                // Add to our list
 | 
			
		||||
                this.uiImages.Add(img);
 | 
			
		||||
                this.uiButtons.Add(button);
 | 
			
		||||
                this.uiThumbs.Add(thumb);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Add drums
 | 
			
		||||
            this.player.AddDrums(this.drumRepo.Drums);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void DrumClicked(object sender, RoutedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            var button = sender as Button;
 | 
			
		||||
            if (button == null) return;
 | 
			
		||||
 | 
			
		||||
            var tag = button.Tag as string;
 | 
			
		||||
            if (tag == null) return;
 | 
			
		||||
 | 
			
		||||
            int index = int.Parse(tag);
 | 
			
		||||
            this.player.Play(this.drumRepo.Drums[index].Name + "0");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void DrumMoved(object sender, DragDeltaEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            var thumb = sender as Thumb;
 | 
			
		||||
            if (thumb == null) return;
 | 
			
		||||
 | 
			
		||||
            var tag = thumb.Tag as string;
 | 
			
		||||
            if (tag == null) return;
 | 
			
		||||
 | 
			
		||||
            int index = int.Parse(tag);
 | 
			
		||||
            Canvas.SetLeft(uiImages[index], Canvas.GetLeft(uiImages[index]) + e.HorizontalChange);
 | 
			
		||||
            Canvas.SetLeft(uiButtons[index], Canvas.GetLeft(uiButtons[index]) + e.HorizontalChange);
 | 
			
		||||
            Canvas.SetLeft(uiThumbs[index], Canvas.GetLeft(uiThumbs[index]) + e.HorizontalChange);
 | 
			
		||||
            Canvas.SetTop(uiImages[index], Canvas.GetTop(uiImages[index]) + e.VerticalChange);
 | 
			
		||||
            Canvas.SetTop(uiButtons[index], Canvas.GetTop(uiButtons[index]) + e.VerticalChange);
 | 
			
		||||
            Canvas.SetTop(uiThumbs[index], Canvas.GetTop(uiThumbs[index]) + e.VerticalChange);
 | 
			
		||||
            drumRepo.Drums[index].Position = new Point(drumRepo.Drums[index].Position.X + e.HorizontalChange, drumRepo.Drums[index].Position.Y + e.VerticalChange);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Invoked when this page is about to be displayed in a Frame.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
 | 
			
		||||
        /// property is typically used to configure the page.</param>
 | 
			
		||||
        protected override void OnNavigatedTo(NavigationEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async void mybutton_Click_1(object sender, RoutedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            var picker = new Windows.Storage.Pickers.FileOpenPicker();
 | 
			
		||||
            picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;
 | 
			
		||||
            picker.FileTypeFilter.Add("*");
 | 
			
		||||
            var file = await picker.PickSingleFileAsync();
 | 
			
		||||
 | 
			
		||||
            //blabla.Source = new Uri(file.Path);
 | 
			
		||||
            //blabla.Play();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void buttonEditMode_Click_1(object sender, RoutedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            var button = sender as ToggleButton;
 | 
			
		||||
            if (button == null) return;
 | 
			
		||||
 | 
			
		||||
            // Fix togglebuton style bug
 | 
			
		||||
            VisualStateManager.GoToState(button, button.IsChecked.Value ? "Checked" : "Unchecked", false);
 | 
			
		||||
 | 
			
		||||
            // Change visibility of thumbs
 | 
			
		||||
            bool visible = (buttonEditMode.IsChecked.HasValue && buttonEditMode.IsChecked.Value);
 | 
			
		||||
 | 
			
		||||
            foreach (var i in this.uiThumbs)
 | 
			
		||||
                if (visible) i.Visibility = Windows.UI.Xaml.Visibility.Visible;
 | 
			
		||||
                else i.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								DrumKit/Package.appxmanifest
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,35 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest">
 | 
			
		||||
  <Identity Name="9e797bd6-ff19-4416-8ec8-f371d6d86244" Publisher="CN=Tiberiu" Version="1.0.0.0" />
 | 
			
		||||
  <Properties>
 | 
			
		||||
    <DisplayName>DrumKit</DisplayName>
 | 
			
		||||
    <PublisherDisplayName>Tiberiu</PublisherDisplayName>
 | 
			
		||||
    <Logo>Assets\StoreLogo.png</Logo>
 | 
			
		||||
  </Properties>
 | 
			
		||||
  <Prerequisites>
 | 
			
		||||
    <OSMinVersion>6.2.1</OSMinVersion>
 | 
			
		||||
    <OSMaxVersionTested>6.2.1</OSMaxVersionTested>
 | 
			
		||||
  </Prerequisites>
 | 
			
		||||
  <Resources>
 | 
			
		||||
    <Resource Language="x-generate" />
 | 
			
		||||
  </Resources>
 | 
			
		||||
  <Applications>
 | 
			
		||||
    <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="DrumKit.App">
 | 
			
		||||
      <VisualElements DisplayName="DrumKit" Logo="Assets\Logos\Logo.png" SmallLogo="Assets\Logos\SmallLogo.png" Description="DrumKit" ForegroundText="light" BackgroundColor="#464646">
 | 
			
		||||
        <DefaultTile ShowName="allLogos" />
 | 
			
		||||
        <SplashScreen Image="Assets\Logos\SplashScreen.png" />
 | 
			
		||||
        <InitialRotationPreference>
 | 
			
		||||
          <Rotation Preference="landscape" />
 | 
			
		||||
          <Rotation Preference="landscapeFlipped" />
 | 
			
		||||
        </InitialRotationPreference>
 | 
			
		||||
      </VisualElements>
 | 
			
		||||
      <Extensions>
 | 
			
		||||
        <Extension Category="windows.backgroundTasks" EntryPoint="DrumKit">
 | 
			
		||||
          <BackgroundTasks>
 | 
			
		||||
            <Task Type="audio" />
 | 
			
		||||
          </BackgroundTasks>
 | 
			
		||||
        </Extension>
 | 
			
		||||
      </Extensions>
 | 
			
		||||
    </Application>
 | 
			
		||||
  </Applications>
 | 
			
		||||
</Package>
 | 
			
		||||
							
								
								
									
										29
									
								
								DrumKit/Properties/AssemblyInfo.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,29 @@
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Runtime.CompilerServices;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
 | 
			
		||||
// General Information about an assembly is controlled through the following 
 | 
			
		||||
// set of attributes. Change these attribute values to modify the information
 | 
			
		||||
// associated with an assembly.
 | 
			
		||||
[assembly: AssemblyTitle("DrumKit")]
 | 
			
		||||
[assembly: AssemblyDescription("")]
 | 
			
		||||
[assembly: AssemblyConfiguration("")]
 | 
			
		||||
[assembly: AssemblyCompany("")]
 | 
			
		||||
[assembly: AssemblyProduct("DrumKit")]
 | 
			
		||||
[assembly: AssemblyCopyright("Copyright ©  2012")]
 | 
			
		||||
[assembly: AssemblyTrademark("")]
 | 
			
		||||
[assembly: AssemblyCulture("")]
 | 
			
		||||
 | 
			
		||||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
// You can specify all the values or you can default the Build and Revision Numbers 
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
// [assembly: AssemblyVersion("1.0.*")]
 | 
			
		||||
[assembly: AssemblyVersion("1.0.0.0")]
 | 
			
		||||
[assembly: AssemblyFileVersion("1.0.0.0")]
 | 
			
		||||
[assembly: ComVisible(false)]
 | 
			
		||||
							
								
								
									
										55
									
								
								DrumKit/Recorder.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,55 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DrumKit
 | 
			
		||||
{
 | 
			
		||||
    class Recorder
 | 
			
		||||
    {
 | 
			
		||||
        private SortedDictionary<double, Uri> hits;
 | 
			
		||||
        private DateTime begin;
 | 
			
		||||
 | 
			
		||||
        public bool IsRecording { get; private set; }
 | 
			
		||||
 | 
			
		||||
        public Recorder()
 | 
			
		||||
        {
 | 
			
		||||
            this.IsRecording = false;
 | 
			
		||||
            this.begin = new DateTime();
 | 
			
		||||
            this.hits = new SortedDictionary<double, Uri>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Start()
 | 
			
		||||
        {
 | 
			
		||||
            this.IsRecording = true;
 | 
			
		||||
            begin = DateTime.Now;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Add(Uri uri)
 | 
			
		||||
        {
 | 
			
		||||
            if (!IsRecording)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            var time = DateTime.Now - this.begin;
 | 
			
		||||
            this.hits.Add(time.TotalMilliseconds, uri);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Stop()
 | 
			
		||||
        {
 | 
			
		||||
            this.IsRecording = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Play()
 | 
			
		||||
        {
 | 
			
		||||
            SoundPlayer player = new SoundPlayer();
 | 
			
		||||
 | 
			
		||||
            var sounduris = this.hits.Values.Distinct();
 | 
			
		||||
            foreach (var i in sounduris)
 | 
			
		||||
                player.AddWave(i.AbsolutePath, i.AbsolutePath);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								DrumKit/Repository/DrumRepository.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,76 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Windows.Storage;
 | 
			
		||||
 | 
			
		||||
namespace DrumKit
 | 
			
		||||
{
 | 
			
		||||
    class DrumRepository
 | 
			
		||||
    {
 | 
			
		||||
        public List<Drum> Drums { get; private set; }
 | 
			
		||||
 | 
			
		||||
        public DrumRepository()
 | 
			
		||||
        {
 | 
			
		||||
            this.Drums = new List<Drum>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task LoadFile(Uri path)
 | 
			
		||||
        {
 | 
			
		||||
            StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(path);
 | 
			
		||||
            IList<string> lines = await FileIO.ReadLinesAsync(file);
 | 
			
		||||
 | 
			
		||||
            Drum drum = null;
 | 
			
		||||
            double x, y;
 | 
			
		||||
 | 
			
		||||
            foreach (var i in lines)
 | 
			
		||||
            {
 | 
			
		||||
                var clean = i.Trim(' ', '\t', '\r', '\n');
 | 
			
		||||
                
 | 
			
		||||
                // New drum
 | 
			
		||||
                if (clean[0] == '[')
 | 
			
		||||
                {
 | 
			
		||||
                    if (drum != null)
 | 
			
		||||
                        this.Drums.Add(drum);
 | 
			
		||||
 | 
			
		||||
                    drum = new Drum();
 | 
			
		||||
                    drum.Name = clean.Substring(1, clean.Length - 2);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Attribute
 | 
			
		||||
                else if (drum != null)
 | 
			
		||||
                {
 | 
			
		||||
                    var split = clean.Split(new char[] { '=', ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
 | 
			
		||||
 | 
			
		||||
                    switch (split[0])
 | 
			
		||||
                    {
 | 
			
		||||
                        case "position":
 | 
			
		||||
                            x = double.Parse(split[1]);
 | 
			
		||||
                            y = double.Parse(split[2]);
 | 
			
		||||
                            drum.Position = new Windows.Foundation.Point(x, y);
 | 
			
		||||
                            break;
 | 
			
		||||
 | 
			
		||||
                        case "size":
 | 
			
		||||
                            x = double.Parse(split[1]);
 | 
			
		||||
                            drum.Size = x;
 | 
			
		||||
                            break;
 | 
			
		||||
 | 
			
		||||
                        case "image":
 | 
			
		||||
                            drum.ImageSource = new Uri(split[1]);
 | 
			
		||||
                            break;
 | 
			
		||||
 | 
			
		||||
                        case "sound":
 | 
			
		||||
                            if (split.Length == 2)
 | 
			
		||||
                                drum.SetSoundSource(0, new Uri(split[1]));
 | 
			
		||||
                            else drum.SetSoundSource(int.Parse(split[1]), new Uri(split[2]));
 | 
			
		||||
                            break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (drum != null)
 | 
			
		||||
                this.Drums.Add(drum);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										72
									
								
								DrumKit/SoundPlayer.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,72 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using SharpDX;
 | 
			
		||||
using SharpDX.XAudio2;
 | 
			
		||||
using SharpDX.IO;
 | 
			
		||||
using SharpDX.Multimedia;
 | 
			
		||||
 | 
			
		||||
namespace DrumKit
 | 
			
		||||
{
 | 
			
		||||
    class SoundPlayer
 | 
			
		||||
    {
 | 
			
		||||
        private XAudio2 xaudio;
 | 
			
		||||
        private MasteringVoice mvoice;
 | 
			
		||||
        Dictionary<string, MyWave> sounds;
 | 
			
		||||
        SoundPool pool;
 | 
			
		||||
 | 
			
		||||
        public SoundPlayer()
 | 
			
		||||
        {
 | 
			
		||||
            xaudio = new XAudio2();
 | 
			
		||||
            xaudio.StartEngine();
 | 
			
		||||
            mvoice = new MasteringVoice(xaudio);
 | 
			
		||||
            sounds = new Dictionary<string, MyWave>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void AddWave(string key, string filepath)
 | 
			
		||||
        {
 | 
			
		||||
            MyWave wave = new MyWave();
 | 
			
		||||
 | 
			
		||||
            var nativeFileStream = new NativeFileStream(filepath, NativeFileMode.Open, NativeFileAccess.Read, NativeFileShare.Read);
 | 
			
		||||
            var soundStream = new SoundStream(nativeFileStream);
 | 
			
		||||
            var buffer = new AudioBuffer() { Stream = soundStream, AudioBytes = (int)soundStream.Length, Flags = BufferFlags.EndOfStream };
 | 
			
		||||
 | 
			
		||||
            wave.Buffer = buffer;
 | 
			
		||||
            wave.DecodedPacketsInfo = soundStream.DecodedPacketsInfo;
 | 
			
		||||
            wave.WaveFormat = soundStream.Format;
 | 
			
		||||
 | 
			
		||||
            this.sounds.Add(key, wave);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void AddDrums(IEnumerable<Drum> drums)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (var d in drums)
 | 
			
		||||
                foreach (var s in d.SoundSources)
 | 
			
		||||
                {
 | 
			
		||||
                    string key = d.Name + s.Key.ToString();
 | 
			
		||||
                    string path = s.Value.AbsolutePath.TrimStart('\\', '/');
 | 
			
		||||
                    this.AddWave(key, path);
 | 
			
		||||
                }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Play(string key)
 | 
			
		||||
        {
 | 
			
		||||
            if (!this.sounds.ContainsKey(key)) return;
 | 
			
		||||
            MyWave w = this.sounds[key];
 | 
			
		||||
 | 
			
		||||
            if (pool == null)
 | 
			
		||||
                pool = new SoundPool(xaudio, w.WaveFormat);
 | 
			
		||||
 | 
			
		||||
            pool.PlayBuffer(w.Buffer, w.DecodedPacketsInfo);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    class MyWave
 | 
			
		||||
    {
 | 
			
		||||
        public AudioBuffer Buffer { get; set; }
 | 
			
		||||
        public uint[] DecodedPacketsInfo { get; set; }
 | 
			
		||||
        public WaveFormat WaveFormat { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								DrumKit/SoundPool.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,41 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using SharpDX;
 | 
			
		||||
using SharpDX.XAudio2;
 | 
			
		||||
using SharpDX.Multimedia;
 | 
			
		||||
 | 
			
		||||
namespace DrumKit
 | 
			
		||||
{
 | 
			
		||||
    class SoundPool
 | 
			
		||||
    {
 | 
			
		||||
        List<SourceVoice> voices;
 | 
			
		||||
 | 
			
		||||
        public SoundPool(XAudio2 device, WaveFormat format)
 | 
			
		||||
        {
 | 
			
		||||
            voices = new List<SourceVoice>();
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < 64; i++)
 | 
			
		||||
                voices.Add(new SourceVoice(device, format, true));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public void PlayBuffer(AudioBuffer buffer, uint[] packetinfo)
 | 
			
		||||
        {
 | 
			
		||||
            int preferred = -1;
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < voices.Count; i++)
 | 
			
		||||
                if (voices[i].State.BuffersQueued == 0)
 | 
			
		||||
                    preferred = i;
 | 
			
		||||
 | 
			
		||||
            if (preferred != -1)
 | 
			
		||||
            {
 | 
			
		||||
                // voices[preferred].FlushSourceBuffers();
 | 
			
		||||
                voices[preferred].SubmitSourceBuffer(buffer, packetinfo);
 | 
			
		||||
                voices[preferred].Start();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||