diff options
author | matthewsotoudeh <matthewsot@outlook.com> | 2016-09-05 18:34:50 -0700 |
---|---|---|
committer | matthewsotoudeh <matthewsot@outlook.com> | 2016-09-05 18:34:50 -0700 |
commit | cdae5a98f458bd4de6c2f829238b2a299560253f (patch) | |
tree | 64aa686362faa84d1385de79363a7ce7d6f7770a | |
parent | f02e0b8352df1464fb9a00b68220d324685a7390 (diff) |
added a basic csproj
-rw-r--r-- | .gitattributes | 63 | ||||
-rw-r--r-- | README.md | 6 | ||||
-rw-r--r-- | RollingWavReader/RollingWavReader.sln | 40 | ||||
-rw-r--r-- | RollingWavReader/RollingWavReader/Properties/AssemblyInfo.cs | 29 | ||||
-rw-r--r-- | RollingWavReader/RollingWavReader/Properties/RollingWavReader.rd.xml | 33 | ||||
-rw-r--r-- | RollingWavReader/RollingWavReader/RollingWavReader.cs | 258 | ||||
-rw-r--r-- | RollingWavReader/RollingWavReader/RollingWavReader.csproj | 125 | ||||
-rw-r--r-- | RollingWavReader/RollingWavReader/project.json | 16 |
8 files changed, 569 insertions, 1 deletions
diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain @@ -1,2 +1,6 @@ # RollingWavReader -A C#/.NET WAV reader that supports reading from a stream that's being updated in real-time +A C#/.NET WAV reader that supports reading from a stream that's being updated in real-time. + +# Usage +Once you've created a ``RollingWavReader`` instance, simply call the ``Update()`` function at regular intervals and ``FinalizeData()`` once the stream has been closed. + diff --git a/RollingWavReader/RollingWavReader.sln b/RollingWavReader/RollingWavReader.sln new file mode 100644 index 0000000..00565fb --- /dev/null +++ b/RollingWavReader/RollingWavReader.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RollingWavReader", "RollingWavReader\RollingWavReader.csproj", "{399223DF-43A8-4238-84BB-C3DF47034CE4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Debug|ARM.ActiveCfg = Debug|ARM + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Debug|ARM.Build.0 = Debug|ARM + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Debug|x64.ActiveCfg = Debug|x64 + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Debug|x64.Build.0 = Debug|x64 + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Debug|x86.ActiveCfg = Debug|x86 + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Debug|x86.Build.0 = Debug|x86 + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Release|Any CPU.Build.0 = Release|Any CPU + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Release|ARM.ActiveCfg = Release|ARM + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Release|ARM.Build.0 = Release|ARM + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Release|x64.ActiveCfg = Release|x64 + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Release|x64.Build.0 = Release|x64 + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Release|x86.ActiveCfg = Release|x86 + {399223DF-43A8-4238-84BB-C3DF47034CE4}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/RollingWavReader/RollingWavReader/Properties/AssemblyInfo.cs b/RollingWavReader/RollingWavReader/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2177b0a --- /dev/null +++ b/RollingWavReader/RollingWavReader/Properties/AssemblyInfo.cs @@ -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("RollingWavReader")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("RollingWavReader")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[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)]
\ No newline at end of file diff --git a/RollingWavReader/RollingWavReader/Properties/RollingWavReader.rd.xml b/RollingWavReader/RollingWavReader/Properties/RollingWavReader.rd.xml new file mode 100644 index 0000000..ae17f16 --- /dev/null +++ b/RollingWavReader/RollingWavReader/Properties/RollingWavReader.rd.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + This file contains Runtime Directives, specifications about types your application accesses + through reflection and other dynamic code patterns. Runtime Directives are used to control the + .NET Native optimizer and ensure that it does not remove code accessed by your library. If your + library does not do any reflection, then you generally do not need to edit this file. However, + if your library reflects over types, especially types passed to it or derived from its types, + then you should write Runtime Directives. + + The most common use of reflection in libraries is to discover information about types passed + to the library. Runtime Directives have three ways to express requirements on types passed to + your library. + + 1. Parameter, GenericParameter, TypeParameter, TypeEnumerableParameter + Use these directives to reflect over types passed as a parameter. + + 2. SubTypes + Use a SubTypes directive to reflect over types derived from another type. + + 3. AttributeImplies + Use an AttributeImplies directive to indicate that your library needs to reflect over + types or methods decorated with an attribute. + + For more information on writing Runtime Directives for libraries, please visit + http://go.microsoft.com/fwlink/?LinkID=391919 +--> +<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata"> + <Library Name="RollingWavReader"> + + <!-- add directives for your library here --> + + </Library> +</Directives> diff --git a/RollingWavReader/RollingWavReader/RollingWavReader.cs b/RollingWavReader/RollingWavReader/RollingWavReader.cs new file mode 100644 index 0000000..59b9eca --- /dev/null +++ b/RollingWavReader/RollingWavReader/RollingWavReader.cs @@ -0,0 +1,258 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Threading.Tasks; +using Windows.Storage.Streams; + +namespace VoicePrint +{ + class RollingWavReader + { + public int Channels { get; set; } + public int SampleRate { get; set; } + public int SampleBitWidth { get; set; } + public long[][] Samples { get; set; } + public List<double[]> Features { get; set; } + public List<Tuple<int, int, int, int>> OngoingMFCCs { get; set; } + public List<bool> AreMFCCsOngoing { get; set; } + public int UsedSampleLength { get; set; } + public long NumSamples { get; set; } + private IRandomAccessStream _Source { get; set; } + private ulong Position { get; set; } + private ulong DataChunkPosition { get; set; } + private bool ReadingData { get; set; } + + public RollingWavReader(IRandomAccessStream source) + { + _Source = source; + Position = 0; + OngoingMFCCs = new List<Tuple<int, int, int, int>>(); + Features = new List<double[]>(); + AreMFCCsOngoing = new List<bool>(); + } + + public async Task Update() + { + var cloned = _Source.CloneStream(); + if (!ReadingData) + { + ParseHeaders(cloned); + if (ReadingData) + { + Position = DataChunkPosition + 8; //set position to the first sample + Samples = new long[Channels][]; + for (var c = 0; c < Samples.Length; c++) + { + Samples[c] = new long[4800]; + } + UsedSampleLength = 0; + } + } + if (ReadingData) + { + await ParseRollingData(cloned); + } + } + + private void ParseFormatChunk(byte[] rawData, int offset) + { + Channels = BitConverter.ToInt16(rawData, offset + 10); + SampleRate = BitConverter.ToInt32(rawData, offset + 12); + SampleBitWidth = BitConverter.ToInt16(rawData, offset + 22); + } + + private async Task ParseRollingData(IRandomAccessStream source) + { + var bytesLeft = source.Size - Position; + var offsetSample = UsedSampleLength; + + var bytesPerSample = (ulong)SampleBitWidth / 8; + var samplesToParse = bytesLeft / (bytesPerSample * (ulong)Channels); + + UsedSampleLength += (int)samplesToParse; + + if (Samples[0].Length < UsedSampleLength + (int)samplesToParse) + { + for (var c = 0; c < Channels; c++) + { + Array.Resize(ref Samples[c], Samples[0].Length + ((int)samplesToParse) + 4800); //Throw in an extra second for kicks + } + } + + var rawData = new byte[(int)samplesToParse * Channels * (int)bytesPerSample]; + source.Seek(Position); + await source.ReadAsync(rawData.AsBuffer(), (uint)rawData.Length, InputStreamOptions.None); + for (ulong s = 0; s < samplesToParse; s++) + { + for (var c = 0; c < Channels; c++) + { + var sourceOffset = (int)((s * bytesPerSample * (ulong)Channels) + ((ulong)c * bytesPerSample)); + if (sourceOffset >= rawData.Length) break; + var sampleIndex = offsetSample + (int)s; + if (Samples[c][sampleIndex] != default(long)) + { + var y = 1 + 1; + } + switch (SampleBitWidth) + { + case 8: + Samples[c][sampleIndex] = (long)rawData[sourceOffset]; + continue; + case 16: + Samples[c][sampleIndex] = BitConverter.ToInt16(rawData, sourceOffset); + continue; + case 32: + Samples[c][sampleIndex] = BitConverter.ToInt32(rawData, sourceOffset); + continue; + case 64: + Samples[c][sampleIndex] = BitConverter.ToInt64(rawData, sourceOffset); + continue; + default: + throw new NotImplementedException(); + } + } + } + Position += samplesToParse * (ulong)Channels * bytesPerSample; + } + + public async Task FinalizeData() + { + await Update(); + for (var c = 0; c < Channels; c++) + { + Array.Resize(ref Samples[c], UsedSampleLength); //Throw in an extra second for kicks + } + } + + private async void ParseHeaders(IRandomAccessStream source) + { + source.Seek(0); + var streamContent = new byte[Math.Min(1000, source.Size)]; + await source.ReadAsync(streamContent.AsBuffer(), (uint)Math.Min(1000, source.Size), InputStreamOptions.None); + + var riffText = System.Text.Encoding.ASCII.GetString(streamContent, 0, 4); + var waveText = System.Text.Encoding.ASCII.GetString(streamContent, 8, 4); + + var offset = 12; + while (offset < streamContent.Length) + { + try + { + var chunkName = System.Text.Encoding.ASCII.GetString(streamContent, offset, 4).ToLower(); + if (chunkName.StartsWith("fmt")) + { + ParseFormatChunk(streamContent, offset); + } + + if (chunkName.StartsWith("data")) + { + DataChunkPosition = (ulong)offset; + ReadingData = true; + break; + } + + offset += 8 + BitConverter.ToInt32(streamContent, offset + 4); + } + catch { break; } + } + } + + /* Optional portion of the library for applying feature extraction to the samples */ + + private int NumWindows(int startSample, int maxNumSamples, int windowWidth, int windowOffset) + { + var numWindows = (int)Math.Floor((double)(UsedSampleLength - startSample) / (double)windowOffset); + var endSample = startSample + (numWindows * windowOffset) + (windowWidth - windowOffset); //TODO: Ensure endSample < UsedSampleLength + if ((endSample - startSample) < maxNumSamples) + { + while ((endSample - startSample) < maxNumSamples) + { + endSample += windowOffset; + numWindows++; + } + endSample -= windowOffset; + numWindows--; + } + else if ((endSample - startSample) > maxNumSamples) + { + while ((endSample - startSample) > maxNumSamples) + { + endSample -= windowOffset; + numWindows--; + } + } + if (numWindows > 0) + { + return numWindows; + } + else + { + return -1; + } + } + + public void FilterAndMFCCRollingSamples(int windowWidthMs, int windowOffsetMs, bool finishing = false, + int thresholdAmplitude = 250, double thresholdOfSample = 0.3, int numFilters = 26, int numFeatures = 13, + int channel = 0, bool keepOrder = false) + { + if (keepOrder) throw new NotImplementedException(); + + var windowWidth = windowWidthMs * (SampleRate / 1000); //(in samples) + var windowOffset = windowOffsetMs * (SampleRate / 1000); //(in samples) + + if (!ReadingData || UsedSampleLength < windowWidth) return; + + var startSample = OngoingMFCCs.Any() ? OngoingMFCCs.Max(a => a.Item2) : 0; //Get the highest sample that another one has ended on + var startFeatureIndex = OngoingMFCCs.Any() ? OngoingMFCCs.Max(a => a.Item4) : 0; + var maxNumSamples = UsedSampleLength - startSample; + var numWindows = NumWindows(startSample, maxNumSamples, windowWidth, windowOffset); + if (numWindows == -1) return; + var endSample = startSample + (numWindows * windowOffset) + (windowWidth - windowOffset); + var endFeatureIndex = startFeatureIndex + numWindows; + + var thisTuple = new Tuple<int, int, int, int>(startSample, endSample, startFeatureIndex, endFeatureIndex); + OngoingMFCCs.Add(thisTuple); + AreMFCCsOngoing.Insert(OngoingMFCCs.IndexOf(thisTuple), true); + + var samples = Samples[0]; + + var features = new double[numWindows][]; + var didBreak = false; + + var parallelResult = Parallel.For(0, numWindows, (window, state) => + { + try + { + var windowSamples = samples.Skip(startSample + ((int)window * windowOffset)).Take(windowWidth).Select(amplitude => (double)amplitude).ToArray(); + if (windowSamples.Count(sample => Math.Abs(sample) < thresholdAmplitude) > (windowSamples.Length * thresholdOfSample)) return; + features[window] = MFCC.compute(windowSamples, numFilters, numFeatures); + } + catch + { + didBreak = true; + state.Break(); + } + }); + + if (!didBreak && !parallelResult.IsCompleted) + { + throw new Exception("Parallel For loop didn't complete."); + } + + Features.InsertRange(startFeatureIndex, features); + AreMFCCsOngoing[OngoingMFCCs.IndexOf(thisTuple)] = false; + } + + public async Task<double[][]> FinishMFCCSamples(int windowWidthMs, int windowOffsetMs) + { + FilterAndMFCCRollingSamples(windowWidthMs, windowOffsetMs, true); + while (AreMFCCsOngoing.Any(b => b)) + { + await Task.Delay(TimeSpan.FromMilliseconds(250)); + } + Features = Features.Where(feature => feature != null).ToList(); + return Features.ToArray(); + } + } +} diff --git a/RollingWavReader/RollingWavReader/RollingWavReader.csproj b/RollingWavReader/RollingWavReader/RollingWavReader.csproj new file mode 100644 index 0000000..c5918fc --- /dev/null +++ b/RollingWavReader/RollingWavReader/RollingWavReader.csproj @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="14.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>{399223df-43a8-4238-84bb-c3df47034ce4}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>RollingWavReader</RootNamespace> + <AssemblyName>RollingWavReader</AssemblyName> + <DefaultLanguage>en-US</DefaultLanguage> + <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier> + <TargetPlatformVersion>10.0.14393.0</TargetPlatformVersion> + <TargetPlatformMinVersion>10.0.10586.0</TargetPlatformMinVersion> + <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + </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;WINDOWS_UWP</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;WINDOWS_UWP</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> + <PlatformTarget>x86</PlatformTarget> + <DebugSymbols>true</DebugSymbols> + <OutputPath>bin\x86\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants> + <NoWarn>;2008</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x86</PlatformTarget> + <UseVSHostingProcess>false</UseVSHostingProcess> + <ErrorReport>prompt</ErrorReport> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <PlatformTarget>x86</PlatformTarget> + <OutputPath>bin\x86\Release\</OutputPath> + <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants> + <Optimize>true</Optimize> + <NoWarn>;2008</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <UseVSHostingProcess>false</UseVSHostingProcess> + <ErrorReport>prompt</ErrorReport> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'"> + <PlatformTarget>ARM</PlatformTarget> + <DebugSymbols>true</DebugSymbols> + <OutputPath>bin\ARM\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants> + <NoWarn>;2008</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>ARM</PlatformTarget> + <UseVSHostingProcess>false</UseVSHostingProcess> + <ErrorReport>prompt</ErrorReport> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'"> + <PlatformTarget>ARM</PlatformTarget> + <OutputPath>bin\ARM\Release\</OutputPath> + <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants> + <Optimize>true</Optimize> + <NoWarn>;2008</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>ARM</PlatformTarget> + <UseVSHostingProcess>false</UseVSHostingProcess> + <ErrorReport>prompt</ErrorReport> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'"> + <PlatformTarget>x64</PlatformTarget> + <DebugSymbols>true</DebugSymbols> + <OutputPath>bin\x64\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants> + <NoWarn>;2008</NoWarn> + <DebugType>full</DebugType> + <PlatformTarget>x64</PlatformTarget> + <UseVSHostingProcess>false</UseVSHostingProcess> + <ErrorReport>prompt</ErrorReport> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'"> + <PlatformTarget>x64</PlatformTarget> + <OutputPath>bin\x64\Release\</OutputPath> + <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants> + <Optimize>true</Optimize> + <NoWarn>;2008</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x64</PlatformTarget> + <UseVSHostingProcess>false</UseVSHostingProcess> + <ErrorReport>prompt</ErrorReport> + </PropertyGroup> + <ItemGroup> + <!-- A reference to the entire .Net Framework and Windows SDK are automatically included --> + <None Include="project.json" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Class1.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <EmbeddedResource Include="Properties\RollingWavReader.rd.xml" /> + </ItemGroup> + <PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' "> + <VisualStudioVersion>14.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> diff --git a/RollingWavReader/RollingWavReader/project.json b/RollingWavReader/RollingWavReader/project.json new file mode 100644 index 0000000..92d1456 --- /dev/null +++ b/RollingWavReader/RollingWavReader/project.json @@ -0,0 +1,16 @@ +{ + "dependencies": { + "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0" + }, + "frameworks": { + "uap10.0": {} + }, + "runtimes": { + "win10-arm": {}, + "win10-arm-aot": {}, + "win10-x86": {}, + "win10-x86-aot": {}, + "win10-x64": {}, + "win10-x64-aot": {} + } +}
\ No newline at end of file |