summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatthewsotoudeh <matthewsot@outlook.com>2016-09-05 18:34:50 -0700
committermatthewsotoudeh <matthewsot@outlook.com>2016-09-05 18:34:50 -0700
commitcdae5a98f458bd4de6c2f829238b2a299560253f (patch)
tree64aa686362faa84d1385de79363a7ce7d6f7770a
parentf02e0b8352df1464fb9a00b68220d324685a7390 (diff)
added a basic csproj
-rw-r--r--.gitattributes63
-rw-r--r--README.md6
-rw-r--r--RollingWavReader/RollingWavReader.sln40
-rw-r--r--RollingWavReader/RollingWavReader/Properties/AssemblyInfo.cs29
-rw-r--r--RollingWavReader/RollingWavReader/Properties/RollingWavReader.rd.xml33
-rw-r--r--RollingWavReader/RollingWavReader/RollingWavReader.cs258
-rw-r--r--RollingWavReader/RollingWavReader/RollingWavReader.csproj125
-rw-r--r--RollingWavReader/RollingWavReader/project.json16
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
diff --git a/README.md b/README.md
index 824dafc..1f9ce83 100644
--- a/README.md
+++ b/README.md
@@ -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)' &lt; '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
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback