diff --git a/AudioWaveOutClassLibrary/AudioWaveOutClassLibrary.csproj b/AudioWaveOutClassLibrary/AudioWaveOutClassLibrary.csproj new file mode 100644 index 0000000..bd44ee5 --- /dev/null +++ b/AudioWaveOutClassLibrary/AudioWaveOutClassLibrary.csproj @@ -0,0 +1,10 @@ + + + + net8.0 + enable + enable + true + + + diff --git a/AudioWaveOutClassLibrary/Buffer.cs b/AudioWaveOutClassLibrary/Buffer.cs new file mode 100644 index 0000000..1f2c6b6 --- /dev/null +++ b/AudioWaveOutClassLibrary/Buffer.cs @@ -0,0 +1,198 @@ +//---------------------------------------------------------------------------- +// File Name: Buffer.cs +// +// Description: +// This element reorders and removes duplicate RTP packets as they are +// received from a network source. instantiates Number of packets in the buffer +// and Add Data to a buffer +// +// The element needs the clock-rate of the RTP payload in order to estimate the delay. +// Initialize and start Timer and provides Interval In Milliseconds +// +// +// Author(s): +// Egor Waken +// +// History: +// 06 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +namespace AudioWaveOut +{ + // Buffer + public class Buffer + { + // Constructor + public Buffer(Object sender, uint maxRTPPackets, uint timerIntervalInMilliseconds) + { + // Maintain minimum number + if (maxRTPPackets < 2) + { + throw new Exception("Wrong Arguments. Minimum maxRTPPackets is 2"); + } + + m_Sender = sender; + m_MaxRTPPackets = maxRTPPackets; + m_TimerIntervalInMilliseconds = timerIntervalInMilliseconds; + + Init(); + } + + // Variables + private Object m_Sender = null; + private uint m_MaxRTPPackets = 10; + private uint m_TimerIntervalInMilliseconds = 20; + private global::AudioWaveOut.EventTimer m_Timer = new global::AudioWaveOut.EventTimer(); + private System.Collections.Generic.Queue m_Buffer = new Queue(); + private RTPPacket m_LastRTPPacket = new RTPPacket(); + private bool m_Underflow = true; + private bool m_Overflow = false; + + // Delegates And Event + public delegate void DelegateDataAvailable(Object sender, RTPPacket packet); + public event DelegateDataAvailable DataAvailable; + + // Number of packets in the buffer + public int Length + { + get + { + return m_Buffer.Count; + } + } + + // Maximum number of RTP packets + public uint Maximum + { + get + { + return m_MaxRTPPackets; + } + } + + // Interval In Milliseconds + public uint IntervalInMilliseconds + { + get + { + return m_TimerIntervalInMilliseconds; + } + } + + // Init + private void Init() + { + InitTimer(); + } + + // InitTimer + private void InitTimer() + { + m_Timer.TimerTick += new EventTimer.DelegateTimerTick(OnTimerTick); + } + + // Start + public void Start() + { + m_Timer.Start(m_TimerIntervalInMilliseconds, 0); + m_Underflow = true; + } + + // Stop + public void Stop() + { + m_Timer.Stop(); + m_Buffer.Clear(); + } + + // OnTimerTick + private void OnTimerTick() + { + try + { + if (DataAvailable != null) + { + // If data exists + if (m_Buffer.Count > 0) + { + // If overflow + if (m_Overflow) + { + // Wait until buffer is half empty + if (m_Buffer.Count <= m_MaxRTPPackets / 2) + { + m_Overflow = false; + } + } + + // If underflow + if (m_Underflow) + { + // Wait until buffer is half full + if (m_Buffer.Count < m_MaxRTPPackets / 2) + { + return; + } + else + { + m_Underflow = false; + } + } + + // Send data + m_LastRTPPacket = m_Buffer.Dequeue(); + DataAvailable(m_Sender, m_LastRTPPacket); + } + else + { + // No overflow + m_Overflow = false; + + // If buffer empty + if (m_LastRTPPacket != null && m_Underflow == false) + { + if (m_LastRTPPacket.Data != null) + { + // Underflow present + m_Underflow = true; + } + } + } + } + } + catch (Exception ex) + { + Console.WriteLine(String.Format("JitterBuffer.cs | OnTimerTick() | {0}", ex.Message)); + } + } + + // AddData + public void AddData(RTPPacket packet) + { + try + { + // If no overflow + if (m_Overflow == false) + { + // No maximum size + if (m_Buffer.Count <= m_MaxRTPPackets) + { + m_Buffer.Enqueue(packet); + } + else + { + // Buffer overflow + m_Overflow = true; + } + } + } + catch (Exception ex) + { + Console.WriteLine(String.Format("JitterBuffer.cs | AddData() | {0}", ex.Message)); + } + } + } +} diff --git a/AudioWaveOutClassLibrary/Mixer.cs b/AudioWaveOutClassLibrary/Mixer.cs new file mode 100644 index 0000000..55b4a3e --- /dev/null +++ b/AudioWaveOutClassLibrary/Mixer.cs @@ -0,0 +1,269 @@ +//---------------------------------------------------------------------------- +// File Name: Mixer.cs +// +// Description: +// Recorder is responsible for creating WaveIn Headers, their allocation, +// initialization, and releasing WaveIn headers, creating a stream for recording, +// opening WaveIn, defining the format, WaveIn device. +// +// Initializing and opening OpenWaveIn and its starting, stopping and closing +// Responsible for creating and behaving a stream for WaveIn devices, creating a +// playback buffer and copying and playing data from this buffer +// and monitors changes in WaveIn Devices. +// +// +// Author(s): +// Egor Waken +// +// History: +// 06 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +namespace AudioWaveOut +{ + // Mixer + public class Mixer + { + // MixBytes + public static List MixBytes(List> listList, int BitsPerSample) + { + // Result + List list16 = new List(); + List list16Abs = new List(); + int maximum = 0; + + // Ready + return MixBytes_Intern(listList, BitsPerSample, out list16, out list16Abs, out maximum); + } + + // MixBytes + public static List MixBytes(List> listList, int BitsPerSample, out List listLinear, out List listLinearAbs, out int maximum) + { + // Ready + return MixBytes_Intern(listList, BitsPerSample, out listLinear, out listLinearAbs, out maximum); + } + + // MixBytes_Intern + private static List MixBytes_Intern(List> listList, int BitsPerSample, out List listLinear, out List listLinearAbs, out int maximum) + { + + // Set default value + listLinear = new List(); + listLinearAbs = new List(); + maximum = 0; + + // Determine maximum number of bytes for mixing + int maxBytesCount = 0; + foreach (List l in listList) + { + if (l.Count > maxBytesCount) + { + maxBytesCount = l.Count; + } + } + + // If data exists + if (listList.Count > 0 && maxBytesCount > 0) + { + + // Depending on BitsPerSample + switch (BitsPerSample) + { + // 8 Bits + case 8: + return MixBytes_8Bit(listList, maxBytesCount, out listLinear, out listLinearAbs, out maximum); + + // 16 Bits + case 16: + return MixBytes_16Bit(listList, maxBytesCount, out listLinear, out listLinearAbs, out maximum); + } + } + + // Mistake + return new List(); + } + + // MixBytes_16Bit + private static List MixBytes_16Bit(List> listList, int maxBytesCount, out List listLinear, out List listLinearAbs, out int maximum) + { + // Result + maximum = 0; + + // Create array with linear and byte values + int linearCount = maxBytesCount / 2; + Int32[] bytesLinear = new Int32[linearCount]; + Int32[] bytesLinearAbs = new Int32[linearCount]; + Byte[] bytesRaw = new Byte[maxBytesCount]; + + // For each byte list + for (int v = 0; v < listList.Count; v++) + { + // Convert to array + Byte[] bytes = listList[v].ToArray(); + + // For every 16bit value + for (int i = 0, a = 0; i < linearCount; i++, a += 2) + { + // If there are values to mix + if (i < bytes.Length && a < bytes.Length - 1) + { + // Determine value + Int16 value16 = BitConverter.ToInt16(bytes, a); + int value32 = bytesLinear[i] + value16; + + // Add value (catch overflows) + if (value32 < Int16.MinValue) + { + value32 = Int16.MinValue; + } + else if (value32 > Int16.MaxValue) + { + value32 = Int16.MaxValue; + } + + // Set values + bytesLinear[i] = value32; + bytesLinearAbs[i] = Math.Abs(value32); + Int16 mixed16 = Convert.ToInt16(value32); + Array.Copy(BitConverter.GetBytes(mixed16), 0, bytesRaw, a, 2); + + // Calculate maximum + if (value32 > maximum) + { + maximum = value32; + } + } + else + { + // Leave silent + } + } + } + + // Out result + listLinear = new List(bytesLinear); + listLinearAbs = new List(bytesLinearAbs); + + // Ready + return new List(bytesRaw); + } + + // MixBytes_8Bit + private static List MixBytes_8Bit(List> listList, int maxBytesCount, out List listLinear, out List listLinearAbs, out int maximum) + { + // Result + maximum = 0; + + // Create array with linear and byte values + int linearCount = maxBytesCount; + Int32[] bytesLinear = new Int32[linearCount]; + Byte[] bytesRaw = new Byte[maxBytesCount]; + + // For each byte list + for (int v = 0; v < listList.Count; v++) + { + // Convert to array + Byte[] bytes = listList[v].ToArray(); + + // For every 8 bit value + for (int i = 0; i < linearCount; i++) + { + // If there are values to mix + if (i < bytes.Length) + { + // Determine value + Byte value8 = bytes[i]; + int value32 = bytesLinear[i] + value8; + + // Add value (catch overflows) + if (value32 < Byte.MinValue) + { + value32 = Byte.MinValue; + } + else if (value32 > Byte.MaxValue) + { + value32 = Byte.MaxValue; + } + + // Set values + bytesLinear[i] = value32; + bytesRaw[i] = BitConverter.GetBytes(value32)[0]; + + // Calculate maximum + if (value32 > maximum) + { + maximum = value32; + } + } + else + { + // Leave silent + } + } + } + + // Out results + listLinear = new List(bytesLinear); + listLinearAbs = new List(bytesLinear); + + // Ready + return new List(bytesRaw); + } + + // SubsctractBytes_16Bit + public static List SubsctractBytes_16Bit(List listSource, List listToSubstract) + { + // Result + List list = new List(listSource.Count); + + // Create array with linear values (16bit) + int value16Count = listSource.Count / 2; + List list16Mixed = new List(new Int16[value16Count]); + + // Convert to array + Byte[] bytesSource = listSource.ToArray(); + Byte[] bytesSubstract = listToSubstract.ToArray(); + + // For every 16bit value + for (int i = 0, a = 0; i < value16Count; i++, a += 2) + { + // If values exist + if (i < bytesSource.Length && a < bytesSource.Length - 1) + { + // Determine values + Int16 value16Source = BitConverter.ToInt16(bytesSource, a); + Int16 value16Substract = BitConverter.ToInt16(bytesSubstract, a); + int value32 = value16Source - value16Substract; + + // Add value (catch overflows) + if (value32 < Int16.MinValue) + { + value32 = Int16.MinValue; + } + else if (value32 > Int16.MaxValue) + { + value32 = Int16.MaxValue; + } + + // Set value + list16Mixed[i] = Convert.ToInt16(value32); + } + } + + // For every value + foreach (Int16 v16 in list16Mixed) + { + // Convert integers to bytes + Byte[] bytes = BitConverter.GetBytes(v16); + list.AddRange(bytes); + + } + + // Ready + return list; + } + } +} diff --git a/AudioWaveOutClassLibrary/Player.cs b/AudioWaveOutClassLibrary/Player.cs new file mode 100644 index 0000000..e7cabb1 --- /dev/null +++ b/AudioWaveOutClassLibrary/Player.cs @@ -0,0 +1,708 @@ +//---------------------------------------------------------------------------- +// File Name: Player.cs +// +// Description: +// Responsible for playing data bytes and dividing them into equal parts, +// responsible for playing Wave files, as well as closing them +// +// +// +// Author(s): +// Egor Waken +// +// History: +// 06 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +using System.Runtime.InteropServices; + +namespace AudioWaveOut +{ + // Player + unsafe public class Player + { + // Constructor + public Player() + { + delegateWaveOutProc = new Win32.DelegateWaveOutProc(waveOutProc); + } + + // Variables + private LockerClass Locker = new LockerClass(); + private LockerClass LockerCopy = new LockerClass(); + private IntPtr hWaveOut = IntPtr.Zero; + private String WaveOutDeviceName = ""; + private bool IsWaveOutOpened = false; + private bool IsThreadPlayWaveOutRunning = false; + private bool IsClosed = false; + private bool IsPaused = false; + private bool IsStarted = false; + private bool IsBlocking = false; + private int SamplesPerSecond = 8000; + private int BitsPerSample = 16; + private int Channels = 1; + private int BufferCount = 8; + private int BufferLength = 1024; + private Win32.WAVEHDR*[] WaveOutHeaders; + private Win32.DelegateWaveOutProc delegateWaveOutProc; + private System.Threading.Thread ThreadPlayWaveOut; + private System.Threading.AutoResetEvent AutoResetEventDataPlayed = new System.Threading.AutoResetEvent(false); + + // Delegates And Events + public delegate void DelegateStopped(); + public event DelegateStopped PlayerClosed; + public event DelegateStopped PlayerStopped; + + // Paused + public bool Paused + { + get + { + return IsPaused; + } + } + + // Opened + public bool Opened + { + get + { + return IsWaveOutOpened & IsClosed == false; + } + } + + // Playing + public bool Playing + { + get + { + if (Opened && IsStarted) + { + foreach (Win32.WAVEHDR* pHeader in WaveOutHeaders) + { + if (IsHeaderInqueue(*pHeader)) + { + return true; + } + } + } + return false; + } + } + + // CreateWaveOutHeaders + private bool CreateWaveOutHeaders() + { + // Create buffer + WaveOutHeaders = new Win32.WAVEHDR*[BufferCount]; + int createdHeaders = 0; + + // For every buffer + for (int i = 0; i < BufferCount; i++) + { + // Allocate headers + WaveOutHeaders[i] = (Win32.WAVEHDR*)Marshal.AllocHGlobal(sizeof(Win32.WAVEHDR)); + + // Set header + WaveOutHeaders[i]->dwLoops = 0; + WaveOutHeaders[i]->dwUser = IntPtr.Zero; + WaveOutHeaders[i]->lpNext = IntPtr.Zero; + WaveOutHeaders[i]->reserved = IntPtr.Zero; + WaveOutHeaders[i]->lpData = Marshal.AllocHGlobal(BufferLength); + WaveOutHeaders[i]->dwBufferLength = (uint)BufferLength; + WaveOutHeaders[i]->dwBytesRecorded = 0; + WaveOutHeaders[i]->dwFlags = 0; + + // If the buffer could be prepared + Win32.MMRESULT hr = Win32.waveOutPrepareHeader(hWaveOut, WaveOutHeaders[i], sizeof(Win32.WAVEHDR)); + if (hr == Win32.MMRESULT.MMSYSERR_NOERROR) + { + createdHeaders++; + } + } + + // Ready + return (createdHeaders == BufferCount); + } + + // FreeWaveInHeaders + private void FreeWaveOutHeaders() + { + try + { + if (WaveOutHeaders != null) + { + for (int i = 0; i < WaveOutHeaders.Length; i++) + { + // Release handles + Win32.MMRESULT hr = Win32.waveOutUnprepareHeader(hWaveOut, WaveOutHeaders[i], sizeof(Win32.WAVEHDR)); + + // Wait until finished playing + int count = 0; + while (count <= 100 && (WaveOutHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) == Win32.WaveHdrFlags.WHDR_INQUEUE) + { + System.Threading.Thread.Sleep(20); + count++; + } + + // When data is played + if ((WaveOutHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) != Win32.WaveHdrFlags.WHDR_INQUEUE) + { + // Share data + if (WaveOutHeaders[i]->lpData != IntPtr.Zero) + { + Marshal.FreeHGlobal(WaveOutHeaders[i]->lpData); + WaveOutHeaders[i]->lpData = IntPtr.Zero; + } + } + } + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.Write(ex.Message); + } + } + + // StartThreadRecording + private void StartThreadPlayWaveOut() + { + if (IsThreadPlayWaveOutRunning == false) + { + ThreadPlayWaveOut = new System.Threading.Thread(new System.Threading.ThreadStart(OnThreadPlayWaveOut)); + IsThreadPlayWaveOutRunning = true; + ThreadPlayWaveOut.Name = "PlayWaveOut"; + ThreadPlayWaveOut.Priority = System.Threading.ThreadPriority.Highest; + ThreadPlayWaveOut.Start(); + } + } + + // PlayBytes. Divide bytes into equal pieces and play them individually + private bool PlayBytes(Byte[] bytes) + { + if (bytes.Length > 0) + { + // Size of the byte pieces + int byteSize = bytes.Length / BufferCount; + int currentPos = 0; + + // For every possible buffer + for (int count = 0; count < BufferCount; count++) + { + // Determine the next free buffer + int index = GetNextFreeWaveOutHeaderIndex(); + if (index != -1) + { + try + { + // Copy part + Byte[] partByte = new Byte[byteSize]; + Array.Copy(bytes, currentPos, partByte, 0, byteSize); + currentPos += byteSize; + + // If different file size + if (WaveOutHeaders[index]->dwBufferLength != partByte.Length) + { + // Create new data storage + Marshal.FreeHGlobal(WaveOutHeaders[index]->lpData); + WaveOutHeaders[index]->lpData = Marshal.AllocHGlobal(partByte.Length); + WaveOutHeaders[index]->dwBufferLength = (uint)partByte.Length; + } + + // Copy data + WaveOutHeaders[index]->dwUser = (IntPtr)index; + Marshal.Copy(partByte, 0, WaveOutHeaders[index]->lpData, partByte.Length); + } + catch (Exception ex) + { + // Error while copying + System.Diagnostics.Debug.WriteLine(String.Format("CopyBytesToFreeWaveOutHeaders() | {0}", ex.Message)); + AutoResetEventDataPlayed.Set(); + return false; + } + + // If still open + if (hWaveOut != null) + { + // Play + Win32.MMRESULT hr = Win32.waveOutWrite(hWaveOut, WaveOutHeaders[index], sizeof(Win32.WAVEHDR)); + if (hr != Win32.MMRESULT.MMSYSERR_NOERROR) + { + // Error while playing + AutoResetEventDataPlayed.Set(); + return false; + } + } + else + { + // WaveOut invalid + return false; + } + } + else + { + // Not enough free buffers available + return false; + } + } + return true; + } + // No data available + return false; + } + + // OpenWaveOut + private bool OpenWaveOut() + { + if (hWaveOut == IntPtr.Zero) + { + // If not already open + if (IsWaveOutOpened == false) + { + // Determine format + Win32.WAVEFORMATEX waveFormatEx = new Win32.WAVEFORMATEX(); + waveFormatEx.wFormatTag = (ushort)Win32.WaveFormatFlags.WAVE_FORMAT_PCM; + waveFormatEx.nChannels = (ushort)Channels; + waveFormatEx.nSamplesPerSec = (ushort)SamplesPerSecond; + waveFormatEx.wBitsPerSample = (ushort)BitsPerSample; + waveFormatEx.nBlockAlign = (ushort)((waveFormatEx.wBitsPerSample * waveFormatEx.nChannels) >> 3); + waveFormatEx.nAvgBytesPerSec = (uint)(waveFormatEx.nBlockAlign * waveFormatEx.nSamplesPerSec); + + // Determine WaveOut device + int deviceId = WinSound.GetWaveOutDeviceIdByName(WaveOutDeviceName); + + // Open WaveIn device + Win32.MMRESULT hr = Win32.waveOutOpen(ref hWaveOut, deviceId, ref waveFormatEx, delegateWaveOutProc, 0, (int)Win32.WaveProcFlags.CALLBACK_FUNCTION); + + // If not successful + if (hr != Win32.MMRESULT.MMSYSERR_NOERROR) + { + IsWaveOutOpened = false; + return false; + } + + // Lock handle + GCHandle.Alloc(hWaveOut, GCHandleType.Pinned); + } + } + + IsWaveOutOpened = true; + return true; + } + + // Open + public bool Open(string waveOutDeviceName, int samplesPerSecond, int bitsPerSample, int channels, int bufferCount) + { + try + { + lock (Locker) + { + // If not already open + if (Opened == false) + { + + // Take over data + WaveOutDeviceName = waveOutDeviceName; + SamplesPerSecond = samplesPerSecond; + BitsPerSample = bitsPerSample; + Channels = channels; + BufferCount = Math.Max(bufferCount, 1); + + // If WaveOut could be opened + if (OpenWaveOut()) + { + // If all buffers could be created + if (CreateWaveOutHeaders()) + { + // Start thread + StartThreadPlayWaveOut(); + IsClosed = false; + return true; + } + } + } + + // Already opened + return false; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Start | {0}", ex.Message)); + return false; + } + } + + // PlayData + public bool PlayData(Byte[] datas, bool isBlocking) + { + try + { + if (Opened) + { + int index = GetNextFreeWaveOutHeaderIndex(); + if (index != -1) + { + // Take values + this.IsBlocking = isBlocking; + + // If different file size + if (WaveOutHeaders[index]->dwBufferLength != datas.Length) + { + // Create new data storage + Marshal.FreeHGlobal(WaveOutHeaders[index]->lpData); + WaveOutHeaders[index]->lpData = Marshal.AllocHGlobal(datas.Length); + WaveOutHeaders[index]->dwBufferLength = (uint)datas.Length; + } + + // Copy data + WaveOutHeaders[index]->dwBufferLength = (uint)datas.Length; + WaveOutHeaders[index]->dwUser = (IntPtr)index; + Marshal.Copy(datas, 0, WaveOutHeaders[index]->lpData, datas.Length); + + // Play + this.IsStarted = true; + Win32.MMRESULT hr = Win32.waveOutWrite(hWaveOut, WaveOutHeaders[index], sizeof(Win32.WAVEHDR)); + if (hr == Win32.MMRESULT.MMSYSERR_NOERROR) + { + // If blocking + if (isBlocking) + { + AutoResetEventDataPlayed.WaitOne(); + AutoResetEventDataPlayed.Set(); + } + return true; + } + else + { + // Error while playing + AutoResetEventDataPlayed.Set(); + return false; + } + } + else + { + // No free output buffer available + System.Diagnostics.Debug.WriteLine(String.Format("No free WaveOut Buffer found | {0}", DateTime.Now.ToLongTimeString())); + return false; + } + } + else + { + // Not open + return false; + } + + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("PlayData | {0}", ex.Message)); + return false; + } + } + + // PlayFile (Wave Files) + public bool PlayFile(string fileName, string waveOutDeviceName) + { + lock (Locker) + { + try + { + // WaveFile Read + WaveFileHeader header = WaveFile.Read(fileName); + + // If data exists + if (header.Payload.Length > 0) + { + // When open + if (Open(waveOutDeviceName, (int)header.SamplesPerSecond, (int)header.BitsPerSample, (int)header.Channels, 8)) + { + int index = GetNextFreeWaveOutHeaderIndex(); + if (index != -1) + { + // Bytes Partially played in output buffer + this.IsStarted = true; + return PlayBytes(header.Payload); + } + else + { + // No free output buffer available + AutoResetEventDataPlayed.Set(); + return false; + } + } + else + { + // Not open + AutoResetEventDataPlayed.Set(); + return false; + } + } + else + { + // Bad file + AutoResetEventDataPlayed.Set(); + return false; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("PlayFile | {0}", ex.Message)); + AutoResetEventDataPlayed.Set(); + return false; + } + } + } + + // Close + public bool Close() + { + try + { + lock (Locker) + { + // When open + if (Opened) + { + // Set as manual ended + IsClosed = true; + + // Wait until all data has finished playing + int count = 0; + while (Win32.waveOutReset(hWaveOut) != Win32.MMRESULT.MMSYSERR_NOERROR && count <= 100) + { + System.Threading.Thread.Sleep(50); + count++; + } + + // Share headers and data + FreeWaveOutHeaders(); + + // Wait until all data has finished playing + count = 0; + while (Win32.waveOutClose(hWaveOut) != Win32.MMRESULT.MMSYSERR_NOERROR && count <= 100) + { + System.Threading.Thread.Sleep(50); + count++; + } + + // Set variables + IsWaveOutOpened = false; + AutoResetEventDataPlayed.Set(); + return true; + } + return false; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Close | {0}", ex.Message)); + return false; + } + } + + // StartPause + public bool StartPause() + { + try + { + lock (Locker) + { + // When open + if (Opened) + { + // If not already paused + if (IsPaused == false) + { + // Pause + Win32.MMRESULT hr = Win32.waveOutPause(hWaveOut); + if (hr == Win32.MMRESULT.MMSYSERR_NOERROR) + { + // Save + IsPaused = true; + AutoResetEventDataPlayed.Set(); + return true; + } + } + } + return false; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("StartPause | {0}", ex.Message)); + return false; + } + } + + // EndPause + public bool EndPause() + { + try + { + lock (Locker) + { + // When open + if (Opened) + { + // When paused + if (IsPaused) + { + // Pause + Win32.MMRESULT hr = Win32.waveOutRestart(hWaveOut); + if (hr == Win32.MMRESULT.MMSYSERR_NOERROR) + { + // Save + IsPaused = false; + AutoResetEventDataPlayed.Set(); + return true; + } + } + } + return false; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("EndPause | {0}", ex.Message)); + return false; + } + } + + // GetNextFreeWaveOutHeaderIndex + private int GetNextFreeWaveOutHeaderIndex() + { + for (int i = 0; i < WaveOutHeaders.Length; i++) + { + if (IsHeaderPrepared(*WaveOutHeaders[i]) && !IsHeaderInqueue(*WaveOutHeaders[i])) + { + return i; + } + } + return -1; + } + + // IsHeaderPrepared + private bool IsHeaderPrepared(Win32.WAVEHDR header) + { + return (header.dwFlags & Win32.WaveHdrFlags.WHDR_PREPARED) > 0; + } + + /// IsHeaderInqueue + private bool IsHeaderInqueue(Win32.WAVEHDR header) + { + return (header.dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) > 0; + } + + // waveOutProc + private void waveOutProc(IntPtr hWaveOut, Win32.WOM_Messages msg, IntPtr dwInstance, Win32.WAVEHDR* pWaveHeader, IntPtr lParam) + { + try + { + switch (msg) + { + // Open + case Win32.WOM_Messages.OPEN: + break; + + // Done + case Win32.WOM_Messages.DONE: + + // No that data arrives + IsStarted = true; + AutoResetEventDataPlayed.Set(); + break; + + // Close + case Win32.WOM_Messages.CLOSE: + IsStarted = false; + IsWaveOutOpened = false; + IsPaused = false; + IsClosed = true; + AutoResetEventDataPlayed.Set(); + this.hWaveOut = IntPtr.Zero; + break; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Player.cs | waveOutProc() | {0}", ex.Message)); + AutoResetEventDataPlayed.Set(); + } + } + + // OnThreadRecording + private void OnThreadPlayWaveOut() + { + while (Opened && !IsClosed) + { + // Wait until recording is finished + AutoResetEventDataPlayed.WaitOne(); + + lock (Locker) + { + if (Opened && !IsClosed) + { + // Set variables + IsThreadPlayWaveOutRunning = true; + + // When no more data is played + if (!Playing) + { + // When data has been played + if (IsStarted) + { + IsStarted = false; + + // Submit event + if (PlayerStopped != null) + { + try + { + PlayerStopped(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Player Stopped | {0}", ex.Message)); + } + finally + { + AutoResetEventDataPlayed.Set(); + } + } + } + } + } + } + + // If blocking + if (IsBlocking) + { + AutoResetEventDataPlayed.Set(); + } + } + + lock (Locker) + { + // Set variables + IsThreadPlayWaveOutRunning = false; + } + + // Send event + if (PlayerClosed != null) + { + try + { + PlayerClosed(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Player Closed | {0}", ex.Message)); + } + } + } + } +} diff --git a/AudioWaveOutClassLibrary/Protocols.cs b/AudioWaveOutClassLibrary/Protocols.cs new file mode 100644 index 0000000..2855727 --- /dev/null +++ b/AudioWaveOutClassLibrary/Protocols.cs @@ -0,0 +1,140 @@ +//---------------------------------------------------------------------------- +// File Name: Protocols.cs +// +// Description: +// Determine the Transport protocols types on which the RTP protocol will be based. +// +// Responsible for serializing data into bytes and processing information retrieval. +// +// +// Author(s): +// Egor Waken +// +// History: +// 06 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +using System.Text; + +namespace AudioWaveOut +{ + // Protocols Types + public enum ProtocolsTypes + { + TCP + } + + // Protocol + public class Protocol + { + // Constructor + public Protocol(ProtocolsTypes type, Encoding encoding) + { + this.m_ProtocolType = type; + this.m_Encoding = encoding; + } + + // Variables + private List m_DataBuffer = new List(); + private const int m_MaxBufferLength = 10000; + private ProtocolsTypes m_ProtocolType = ProtocolsTypes.TCP; + private Encoding m_Encoding = Encoding.Default; + public Object m_LockerReceive = new object(); + + //Delegates And Events + public delegate void DelegateDataComplete(Object sender, Byte[] data); + public delegate void DelegateExceptionAppeared(Object sender, Exception ex); + public event DelegateDataComplete DataComplete; + public event DelegateExceptionAppeared ExceptionAppeared; + + + // ToBytes + public Byte[] ToBytes(Byte[] data) + { + try + { + // Bytes length + Byte[] bytesLength = BitConverter.GetBytes(data.Length); + + // Putting it all together + Byte[] allBytes = new Byte[bytesLength.Length + data.Length]; + Array.Copy(bytesLength, allBytes, bytesLength.Length); + Array.Copy(data, 0, allBytes, bytesLength.Length, data.Length); + + // Ready + return allBytes; + } + catch (Exception ex) + { + ExceptionAppeared(null, ex); + } + + // Mistake + return data; + } + + // Receive_TCP_STX_ETX + public void Receive_TCP(Object sender, Byte[] data) + { + lock (m_LockerReceive) + { + try + { + // Append data to buffer + m_DataBuffer.AddRange(data); + + // Prevent buffer overflow + if (m_DataBuffer.Count > m_MaxBufferLength) + { + m_DataBuffer.Clear(); + } + + // Read bytes + Byte[] bytes = m_DataBuffer.Take(4).ToArray(); + + // Determine length + int length = (int)BitConverter.ToInt32(bytes.ToArray(), 0); + + // Ensure maximum length + if (length > m_MaxBufferLength) + { + m_DataBuffer.Clear(); + } + + // As long as data is available + while (m_DataBuffer.Count >= length + 4) + { + // Extract data + Byte[] message = m_DataBuffer.Skip(4).Take(length).ToArray(); + + // Complete data notification + if (DataComplete != null) + { + DataComplete(sender, message); + } + + // Remove data from buffer + m_DataBuffer.RemoveRange(0, length + 4); + + // If further data is available + if (m_DataBuffer.Count > 4) + { + // Calculate new length + bytes = m_DataBuffer.Take(4).ToArray(); + length = (int)BitConverter.ToInt32(bytes.ToArray(), 0); + } + } + } + catch (Exception ex) + { + // Empty buffer + m_DataBuffer.Clear(); + ExceptionAppeared(null, ex); + } + } + } + } +} diff --git a/AudioWaveOutClassLibrary/RTP.cs b/AudioWaveOutClassLibrary/RTP.cs new file mode 100644 index 0000000..f608e15 --- /dev/null +++ b/AudioWaveOutClassLibrary/RTP.cs @@ -0,0 +1,177 @@ +//---------------------------------------------------------------------------- +// File Name: RTP.cs +// +// Description: +// Implementing RTP Packet Class that w`ll be using at the OSI application level +// +// Responsible for parsing incoming data, checking their headers, deserializing the +// received data (since they arrive serialized in bits) and contains a method for +// serialization +// +// +// Author(s): +// Egor Waken +// +// History: +// 06 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + + +namespace AudioWaveOut +{ + // RTPPacket + public class RTPPacket + { + // Constructor + public RTPPacket() + { + + } + + // Constructor + public RTPPacket(byte[] data) + { + Parse(data); + } + + // Variables + public static int MinHeaderLength = 12; + public int HeaderLength = MinHeaderLength; + public int Version = 0; + public bool Padding = false; + public bool Extension = false; + public int CSRCCount = 0; + public bool Marker = false; + public int PayloadType = 0; + public UInt16 SequenceNumber = 0; + public uint Timestamp = 0; + public uint SourceId = 0; + public Byte[] Data; + public UInt16 ExtensionHeaderId = 0; + public UInt16 ExtensionLengthAsCount = 0; + public Int32 ExtensionLengthInBytes = 0; + + // Parse + private void Parse(Byte[] data) + { + if (data.Length >= MinHeaderLength) + { + Version = ValueFromByte(data[0], 6, 2); + Padding = Convert.ToBoolean(ValueFromByte(data[0], 5, 1)); + Extension = Convert.ToBoolean(ValueFromByte(data[0], 4, 1)); + CSRCCount = ValueFromByte(data[0], 0, 4); + Marker = Convert.ToBoolean(ValueFromByte(data[1], 7, 1)); + PayloadType = ValueFromByte(data[1], 0, 7); + HeaderLength = MinHeaderLength + (CSRCCount * 4); + + //Sequence Number + Byte[] seqNum = new Byte[2]; + seqNum[0] = data[3]; + seqNum[1] = data[2]; + SequenceNumber = System.BitConverter.ToUInt16(seqNum, 0); + + //TimeStamp + Byte[] timeStmp = new Byte[4]; + timeStmp[0] = data[7]; + timeStmp[1] = data[6]; + timeStmp[2] = data[5]; + timeStmp[3] = data[4]; + Timestamp = System.BitConverter.ToUInt32(timeStmp, 0); + + //SourceId + Byte[] srcId = new Byte[4]; + srcId[0] = data[8]; + srcId[1] = data[9]; + srcId[2] = data[10]; + srcId[3] = data[11]; + SourceId = System.BitConverter.ToUInt32(srcId, 0); + + // If Extension Header + if (Extension) + { + //ExtensionHeaderId + Byte[] extHeaderId = new Byte[2]; + extHeaderId[1] = data[HeaderLength + 0]; + extHeaderId[0] = data[HeaderLength + 1]; + ExtensionHeaderId = System.BitConverter.ToUInt16(extHeaderId, 0); + + //ExtensionHeaderLength + Byte[] extHeaderLength16 = new Byte[2]; + extHeaderLength16[1] = data[HeaderLength + 2]; + extHeaderLength16[0] = data[HeaderLength + 3]; + ExtensionLengthAsCount = System.BitConverter.ToUInt16(extHeaderLength16.ToArray(), 0); + + // Adjust header length (length times 4 bytes or Int32) + ExtensionLengthInBytes = ExtensionLengthAsCount * 4; + HeaderLength += ExtensionLengthInBytes + 4; + } + + // Copy data + Data = new Byte[data.Length - HeaderLength]; + Array.Copy(data, HeaderLength, this.Data, 0, data.Length - HeaderLength); + } + } + + // GetValueFromByte + private Int32 ValueFromByte(Byte value, int startPos, int length) + { + Byte mask = 0; + // Create mask + for (int i = 0; i < length; i++) + { + mask = (Byte)(mask | 0x1 << startPos + i); + } + + // Result + Byte result = (Byte)((value & mask) >> startPos); + + // Ready + return Convert.ToInt32(result); + } + + // ToBytes + public Byte[] ToBytes() + { + // Result + Byte[] bytes = new Byte[this.HeaderLength + Data.Length]; + + // Byte 0 + bytes[0] = (Byte)(Version << 6); + bytes[0] |= (Byte)(Convert.ToInt32(Padding) << 5); + bytes[0] |= (Byte)(Convert.ToInt32(Extension) << 4); + bytes[0] |= (Byte)(Convert.ToInt32(CSRCCount)); + + // Byte 1 + bytes[1] = (Byte)(Convert.ToInt32(Marker) << 7); + bytes[1] |= (Byte)(Convert.ToInt32(PayloadType)); + + // Byte 2 + 3 + Byte[] bytesSequenceNumber = BitConverter.GetBytes(SequenceNumber); + bytes[2] = bytesSequenceNumber[1]; + bytes[3] = bytesSequenceNumber[0]; + + // Byte 4 until 7 + Byte[] bytesTimeStamp = BitConverter.GetBytes(Timestamp); + bytes[4] = bytesTimeStamp[3]; + bytes[5] = bytesTimeStamp[2]; + bytes[6] = bytesTimeStamp[1]; + bytes[7] = bytesTimeStamp[0]; + + // Byte 8 until 11 + Byte[] bytesSourceId = BitConverter.GetBytes(SourceId); + bytes[8] = bytesSourceId[3]; + bytes[9] = bytesSourceId[2]; + bytes[10] = bytesSourceId[1]; + bytes[11] = bytesSourceId[0]; + + // Data + Array.Copy(this.Data, 0, bytes, this.HeaderLength, this.Data.Length); + + // Ready + return bytes; + } + } +} diff --git a/AudioWaveOutClassLibrary/Recorder.cs b/AudioWaveOutClassLibrary/Recorder.cs new file mode 100644 index 0000000..e0cbe70 --- /dev/null +++ b/AudioWaveOutClassLibrary/Recorder.cs @@ -0,0 +1,431 @@ +//---------------------------------------------------------------------------- +// File Name: Recorder.cs +// +// Description: +// Recorder is responsible for creating WaveIn Headers, their allocation, +// initialization, and releasing WaveIn headers, creating a stream for recording, +// opening WaveIn, defining the format, WaveIn device. +// +// Initializing and opening OpenWaveIn and its starting, stopping and closing +// Responsible for creating and behaving a stream for WaveIn devices, creating a +// playback buffer and copying and playing data from this buffer +// and monitors changes in WaveIn Devices. +// +// +// Author(s): +// Egor Waken +// +// History: +// 06 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +using System.Runtime.InteropServices; + +namespace AudioWaveOut +{ + unsafe public class Recorder + { + // Constructor + public Recorder() + { + delegateWaveInProc = new Win32.DelegateWaveInProc(waveInProc); + } + + // Variables + private LockerClass Locker = new LockerClass(); + private LockerClass LockerCopy = new LockerClass(); + private IntPtr hWaveIn = IntPtr.Zero; + private String WaveInDeviceName = ""; + private bool IsWaveInOpened = false; + private bool IsWaveInStarted = false; + private bool IsThreadRecordingRunning = false; + private bool IsDataIncomming = false; + private bool Stopped = false; + private int SamplesPerSecond = 8000; + private int BitsPerSample = 16; + private int Channels = 1; + private int BufferCount = 8; + private int BufferSize = 1024; + private Win32.WAVEHDR*[] WaveInHeaders; + private Win32.WAVEHDR* CurrentRecordedHeader; + private Win32.DelegateWaveInProc delegateWaveInProc; + private System.Threading.Thread ThreadRecording; + private System.Threading.AutoResetEvent AutoResetEventDataRecorded = new System.Threading.AutoResetEvent(false); + + // Delegates And Events + public delegate void DelegateStopped(); + public delegate void DelegateDataRecorded(Byte[] bytes); + public event DelegateStopped RecordingStopped; + public event DelegateDataRecorded DataRecorded; + + // Started + public bool Started + { + get + { + return IsWaveInStarted && IsWaveInOpened && IsThreadRecordingRunning; + } + } + + // CreateWaveInHeaders + private bool CreateWaveInHeaders() + { + // Create buffer + WaveInHeaders = new Win32.WAVEHDR*[BufferCount]; + int createdHeaders = 0; + + // For every buffer + for (int i = 0; i < BufferCount; i++) + { + // Allocate headers + WaveInHeaders[i] = (Win32.WAVEHDR*)Marshal.AllocHGlobal(sizeof(Win32.WAVEHDR)); + + // Set header + WaveInHeaders[i]->dwLoops = 0; + WaveInHeaders[i]->dwUser = IntPtr.Zero; + WaveInHeaders[i]->lpNext = IntPtr.Zero; + WaveInHeaders[i]->reserved = IntPtr.Zero; + WaveInHeaders[i]->lpData = Marshal.AllocHGlobal(BufferSize); + WaveInHeaders[i]->dwBufferLength = (uint)BufferSize; + WaveInHeaders[i]->dwBytesRecorded = 0; + WaveInHeaders[i]->dwFlags = 0; + + // If the buffer could be prepared + Win32.MMRESULT hr = Win32.waveInPrepareHeader(hWaveIn, WaveInHeaders[i], sizeof(Win32.WAVEHDR)); + if (hr == Win32.MMRESULT.MMSYSERR_NOERROR) + { + // Add first header to recording + if (i == 0) + { + hr = Win32.waveInAddBuffer(hWaveIn, WaveInHeaders[i], sizeof(Win32.WAVEHDR)); + } + createdHeaders++; + } + } + + // Ready + return (createdHeaders == BufferCount); + } + + // FreeWaveInHeaders + private void FreeWaveInHeaders() + { + try + { + if (WaveInHeaders != null) + { + for (int i = 0; i < WaveInHeaders.Length; i++) + { + // Release handle + Win32.MMRESULT hr = Win32.waveInUnprepareHeader(hWaveIn, WaveInHeaders[i], sizeof(Win32.WAVEHDR)); + + // Wait until finished + int count = 0; + while (count <= 100 && (WaveInHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) == Win32.WaveHdrFlags.WHDR_INQUEUE) + { + System.Threading.Thread.Sleep(20); + count++; + } + + // When data is no longer in queue + if ((WaveInHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) != Win32.WaveHdrFlags.WHDR_INQUEUE) + { + // Share data + if (WaveInHeaders[i]->lpData != IntPtr.Zero) + { + Marshal.FreeHGlobal(WaveInHeaders[i]->lpData); + WaveInHeaders[i]->lpData = IntPtr.Zero; + } + } + } + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.Write(ex.Message); + } + } + + // StartThreadRecording + private void StartThreadRecording() + { + if (Started == false) + { + ThreadRecording = new System.Threading.Thread(new System.Threading.ThreadStart(OnThreadRecording)); + IsThreadRecordingRunning = true; + ThreadRecording.Name = "Recording"; + ThreadRecording.Priority = System.Threading.ThreadPriority.Highest; + ThreadRecording.Start(); + } + } + + // StartWaveIn + private bool OpenWaveIn() + { + if (hWaveIn == IntPtr.Zero) + { + // If not already open + if (IsWaveInOpened == false) + { + // Determine format + Win32.WAVEFORMATEX waveFormatEx = new Win32.WAVEFORMATEX(); + waveFormatEx.wFormatTag = (ushort)Win32.WaveFormatFlags.WAVE_FORMAT_PCM; + waveFormatEx.nChannels = (ushort)Channels; + waveFormatEx.nSamplesPerSec = (ushort)SamplesPerSecond; + waveFormatEx.wBitsPerSample = (ushort)BitsPerSample; + waveFormatEx.nBlockAlign = (ushort)((waveFormatEx.wBitsPerSample * waveFormatEx.nChannels) >> 3); + waveFormatEx.nAvgBytesPerSec = (uint)(waveFormatEx.nBlockAlign * waveFormatEx.nSamplesPerSec); + + // Determine WaveIn device + int deviceId = WinSound.GetWaveInDeviceIdByName(WaveInDeviceName); + + // Open WaveIn device + Win32.MMRESULT hr = Win32.waveInOpen(ref hWaveIn, deviceId, ref waveFormatEx, delegateWaveInProc, 0, (int)Win32.WaveProcFlags.CALLBACK_FUNCTION); + + // If not successful + if (hWaveIn == IntPtr.Zero) + { + IsWaveInOpened = false; + return false; + } + + // Lock handle + GCHandle.Alloc(hWaveIn, GCHandleType.Pinned); + } + } + + IsWaveInOpened = true; + return true; + } + + // Start + public bool Start(string waveInDeviceName, int samplesPerSecond, int bitsPerSample, int channels, int bufferCount, int bufferSize) + { + try + { + lock (Locker) + { + // If not already started + if (Started == false) + { + + // Take over data + WaveInDeviceName = waveInDeviceName; + SamplesPerSecond = samplesPerSecond; + BitsPerSample = bitsPerSample; + Channels = channels; + BufferCount = bufferCount; + BufferSize = bufferSize; + + // If WaveIn could be opened + if (OpenWaveIn()) + { + // If all buffers could be created + if (CreateWaveInHeaders()) + { + // When recording could start + Win32.MMRESULT hr = Win32.waveInStart(hWaveIn); + if (hr == Win32.MMRESULT.MMSYSERR_NOERROR) + { + IsWaveInStarted = true; + + // Start thread + StartThreadRecording(); + Stopped = false; + return true; + } + else + { + // Error starting + return false; + } + } + } + } + + // Repeater is already running + return false; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Start | {0}", ex.Message)); + return false; + } + } + + // Stop + public bool Stop() + { + try + { + lock (Locker) + { + // When started + if (Started) + { + // Set as manual ended + Stopped = true; + IsThreadRecordingRunning = false; + + // Close WaveIn + CloseWaveIn(); + + // Set variables + AutoResetEventDataRecorded.Set(); + return true; + } + return false; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Stop | {0}", ex.Message)); + return false; + } + } + + // CloseWaveIn + private void CloseWaveIn() + { + // Set buffer as processed + Win32.MMRESULT hr = Win32.waveInStop(hWaveIn); + + int resetCount = 0; + while (IsAnyWaveInHeaderInState(Win32.WaveHdrFlags.WHDR_INQUEUE) & resetCount < 20) + { + hr = Win32.waveInReset(hWaveIn); + System.Threading.Thread.Sleep(50); + resetCount++; + } + + // Release header handles (before waveInClose) + FreeWaveInHeaders(); + + // Close + hr = Win32.waveInClose(hWaveIn); + } + + // IsAnyWaveInHeaderInState + private bool IsAnyWaveInHeaderInState(Win32.WaveHdrFlags state) + { + for (int i = 0; i < WaveInHeaders.Length; i++) + { + if ((WaveInHeaders[i]->dwFlags & state) == state) + { + return true; + } + } + return false; + } + + // waveInProc + private void waveInProc(IntPtr hWaveIn, Win32.WIM_Messages msg, IntPtr dwInstance, Win32.WAVEHDR* pWaveHdr, IntPtr lParam) + { + switch (msg) + { + // Open + case Win32.WIM_Messages.OPEN: + break; + + // Data + case Win32.WIM_Messages.DATA: + + // No incoming data + IsDataIncomming = true; + + // Remember recorded buffer + CurrentRecordedHeader = pWaveHdr; + + // Set event + AutoResetEventDataRecorded.Set(); + break; + + // Close + case Win32.WIM_Messages.CLOSE: + IsDataIncomming = false; + IsWaveInOpened = false; + AutoResetEventDataRecorded.Set(); + this.hWaveIn = IntPtr.Zero; + break; + } + } + + // OnThreadRecording + private void OnThreadRecording() + { + while (Started && !Stopped) + { + // Wait until recording is finished + AutoResetEventDataRecorded.WaitOne(); + + try + { + // If active + if (Started && !Stopped) + { + // If data exists + if (CurrentRecordedHeader->dwBytesRecorded > 0) + { + // When data is requested + if (DataRecorded != null && IsDataIncomming) + { + try + { + // Copy data + Byte[] bytes = new Byte[CurrentRecordedHeader->dwBytesRecorded]; + Marshal.Copy(CurrentRecordedHeader->lpData, bytes, 0, (int)CurrentRecordedHeader->dwBytesRecorded); + + // Submit event + DataRecorded(bytes); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Recorder.cs | OnThreadRecording() | {0}", ex.Message)); + } + } + + // Keep recording + for (int i = 0; i < WaveInHeaders.Length; i++) + { + if ((WaveInHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) == 0) + { + Win32.MMRESULT hr = Win32.waveInAddBuffer(hWaveIn, WaveInHeaders[i], sizeof(Win32.WAVEHDR)); + } + } + + } + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(ex.Message); + } + } + + + lock (Locker) + { + // Set variables + IsWaveInStarted = false; + IsThreadRecordingRunning = false; + } + + // Send event + if (RecordingStopped != null) + { + try + { + RecordingStopped(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Recording Stopped | {0}", ex.Message)); + } + } + } + } +} diff --git a/AudioWaveOutClassLibrary/Repeater.cs b/AudioWaveOutClassLibrary/Repeater.cs new file mode 100644 index 0000000..c026ad6 --- /dev/null +++ b/AudioWaveOutClassLibrary/Repeater.cs @@ -0,0 +1,707 @@ +//---------------------------------------------------------------------------- +// File Name: Repeater.cs +// +// Description: +// Repeater is responsible for creating WaveIn/ WaveOut Headers, their memory +// allocation, and its release, and monitors changes in WaveIn / WaveOut Devices. +// +// Responsible for creating and behaving a stream for WaveIn / WaveOut devices, +// creating a playback buffer and copying and playing data from this buffer +// +// +// Author(s): +// Egor Waken +// +// History: +// 06 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- +using System.Runtime.InteropServices; + +namespace AudioWaveOut +{ + unsafe public class Repeater + { + // Constructor + public Repeater() + { + delegateWaveInProc = new Win32.DelegateWaveInProc(waveInProc); + delegateWaveOutProc = new Win32.DelegateWaveOutProc(waveOutProc); + } + + // Variables + private LockerClass Locker = new LockerClass(); + private LockerClass LockerCopy = new LockerClass(); + private IntPtr hWaveIn = IntPtr.Zero; + private IntPtr hWaveOut = IntPtr.Zero; + private String WaveInDeviceName = ""; + private String WaveOutDeviceName = ""; + private bool IsWaveInOpened = false; + private bool IsWaveOutOpened = false; + private bool IsWaveInStarted = false; + private bool IsThreadPlayWaveInRunning = false; + private bool IsMute = false; + private bool Stopped = false; + private bool IsDataIncomming = false; + private int SamplesPerSecond = 8000; + private int BitsPerSample = 16; + private int Channels = 1; + private int BufferCount = 8; + private int BufferSize = 1024; + private Win32.WAVEHDR*[] WaveInHeaders; + private Win32.WAVEHDR*[] WaveOutHeaders; + private Win32.WAVEHDR* CurrentRecordedHeader; + private Win32.DelegateWaveInProc delegateWaveInProc; + private Win32.DelegateWaveOutProc delegateWaveOutProc; + private System.Threading.Thread ThreadPlayWaveIn; + private System.Threading.AutoResetEvent AutoResetEventDataRecorded = new System.Threading.AutoResetEvent(false); + private System.Threading.AutoResetEvent AutoResetEventThreadPlayWaveInEnd = new System.Threading.AutoResetEvent(false); + private Byte[] CopyDataBuffer; + private GCHandle GCCopyDataBuffer; + + // Delegates And Events + public delegate void DelegateStopped(); + public event DelegateStopped RepeaterStopped; + + // Started + public bool Started + { + get + { + return IsWaveInStarted && IsWaveInOpened && IsWaveOutOpened && IsThreadPlayWaveInRunning; + } + } + + // IsMute + public bool Mute + { + get + { + return IsMute; + } + set + { + IsMute = value; + } + } + + // CreateWaveInHeaders + private bool CreateWaveInHeaders() + { + // Create buffer + WaveInHeaders = new Win32.WAVEHDR*[BufferCount]; + int createdHeaders = 0; + + // For every buffer + for (int i = 0; i < BufferCount; i++) + { + // Allocate headers + WaveInHeaders[i] = (Win32.WAVEHDR*)Marshal.AllocHGlobal(sizeof(Win32.WAVEHDR)); + + // Set header + WaveInHeaders[i]->dwLoops = 0; + WaveInHeaders[i]->dwUser = IntPtr.Zero; + WaveInHeaders[i]->lpNext = IntPtr.Zero; + WaveInHeaders[i]->reserved = IntPtr.Zero; + WaveInHeaders[i]->lpData = Marshal.AllocHGlobal(BufferSize); + WaveInHeaders[i]->dwBufferLength = (uint)BufferSize; + WaveInHeaders[i]->dwBytesRecorded = 0; + WaveInHeaders[i]->dwFlags = 0; + + // If the buffer could be prepared + Win32.MMRESULT hr = Win32.waveInPrepareHeader(hWaveIn, WaveInHeaders[i], sizeof(Win32.WAVEHDR)); + if (hr == Win32.MMRESULT.MMSYSERR_NOERROR) + { + // Add first header to recording + if (i == 0) + { + hr = Win32.waveInAddBuffer(hWaveIn, WaveInHeaders[i], sizeof(Win32.WAVEHDR)); + } + createdHeaders++; + } + } + + // Ready + return (createdHeaders == BufferCount); + } + + // CreateWaveOutHeaders + private bool CreateWaveOutHeaders() + { + // Create buffer + WaveOutHeaders = new Win32.WAVEHDR*[BufferCount]; + int createdHeaders = 0; + + // For every buffer + for (int i = 0; i < BufferCount; i++) + { + // Allocate headers + WaveOutHeaders[i] = (Win32.WAVEHDR*)Marshal.AllocHGlobal(sizeof(Win32.WAVEHDR)); + + // Set header + WaveOutHeaders[i]->dwLoops = 0; + WaveOutHeaders[i]->dwUser = IntPtr.Zero; + WaveOutHeaders[i]->lpNext = IntPtr.Zero; + WaveOutHeaders[i]->reserved = IntPtr.Zero; + WaveOutHeaders[i]->lpData = Marshal.AllocHGlobal(BufferSize); + WaveOutHeaders[i]->dwBufferLength = (uint)BufferSize; + WaveOutHeaders[i]->dwBytesRecorded = 0; + WaveOutHeaders[i]->dwFlags = 0; + + // If the buffer could be prepared + Win32.MMRESULT hr = Win32.waveOutPrepareHeader(hWaveOut, WaveOutHeaders[i], sizeof(Win32.WAVEHDR)); + if (hr == Win32.MMRESULT.MMSYSERR_NOERROR) + { + createdHeaders++; + } + } + + // Ready + return (createdHeaders == BufferCount); + } + + // FreeWaveInHeaders + private void FreeWaveInHeaders() + { + try + { + if (WaveInHeaders != null) + { + for (int i = 0; i < WaveInHeaders.Length; i++) + { + // Release handle + Win32.MMRESULT hr = Win32.waveInUnprepareHeader(hWaveIn, WaveInHeaders[i], sizeof(Win32.WAVEHDR)); + + // Wait until finished + int count = 0; + while (count <= 100 && (WaveInHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) == Win32.WaveHdrFlags.WHDR_INQUEUE) + { + System.Threading.Thread.Sleep(20); + count++; + } + + // When data is no longer in queue + if ((WaveInHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) != Win32.WaveHdrFlags.WHDR_INQUEUE) + { + // Share data + if (WaveInHeaders[i]->lpData != IntPtr.Zero) + { + Marshal.FreeHGlobal(WaveInHeaders[i]->lpData); + WaveInHeaders[i]->lpData = IntPtr.Zero; + } + } + } + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.Write(ex.Message); + } + } + + // FreeWaveOutHeaders + private void FreeWaveOutHeaders() + { + try + { + if (WaveOutHeaders != null) + { + for (int i = 0; i < WaveOutHeaders.Length; i++) + { + // Release handles + Win32.MMRESULT hr = Win32.waveOutUnprepareHeader(hWaveOut, WaveOutHeaders[i], sizeof(Win32.WAVEHDR)); + + // Wait until finished playing + int count = 0; + while (count <= 100 && (WaveOutHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) == Win32.WaveHdrFlags.WHDR_INQUEUE) + { + System.Threading.Thread.Sleep(20); + count++; + } + + // When data is played + if ((WaveOutHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) != Win32.WaveHdrFlags.WHDR_INQUEUE) + { + // Share data + if (WaveOutHeaders[i]->lpData != IntPtr.Zero) + { + Marshal.FreeHGlobal(WaveOutHeaders[i]->lpData); + WaveOutHeaders[i]->lpData = IntPtr.Zero; + } + } + } + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.Write(ex.Message); + } + } + + // StartThreadRecording + private void StartThreadPlayWaveIn() + { + if (Started == false) + { + ThreadPlayWaveIn = new System.Threading.Thread(new System.Threading.ThreadStart(OnThreadPlayWaveIn)); + IsThreadPlayWaveInRunning = true; + ThreadPlayWaveIn.Name = "PlayWaveIn"; + ThreadPlayWaveIn.Priority = System.Threading.ThreadPriority.Highest; + ThreadPlayWaveIn.Start(); + } + } + + // OpenWaveIn + private bool OpenWaveIn() + { + if (hWaveIn == IntPtr.Zero) + { + // If not already open + if (IsWaveInOpened == false) + { + // Determine format + Win32.WAVEFORMATEX waveFormatEx = new Win32.WAVEFORMATEX(); + waveFormatEx.wFormatTag = (ushort)Win32.WaveFormatFlags.WAVE_FORMAT_PCM; + waveFormatEx.nChannels = (ushort)Channels; + waveFormatEx.nSamplesPerSec = (ushort)SamplesPerSecond; + waveFormatEx.wBitsPerSample = (ushort)BitsPerSample; + waveFormatEx.nBlockAlign = (ushort)((waveFormatEx.wBitsPerSample * waveFormatEx.nChannels) >> 3); + waveFormatEx.nAvgBytesPerSec = (uint)(waveFormatEx.nBlockAlign * waveFormatEx.nSamplesPerSec); + + // Determine WaveIn device + int deviceId = WinSound.GetWaveInDeviceIdByName(WaveInDeviceName); + + // Open WaveIn device + Win32.MMRESULT hr = Win32.waveInOpen(ref hWaveIn, deviceId, ref waveFormatEx, delegateWaveInProc, 0, (int)Win32.WaveProcFlags.CALLBACK_FUNCTION); + + // If not successful + if (hWaveIn == IntPtr.Zero) + { + IsWaveInOpened = false; + return false; + } + + // Lock handle + GCHandle.Alloc(hWaveIn, GCHandleType.Pinned); + } + } + + IsWaveInOpened = true; + return true; + } + + // OpenWaveOut + private bool OpenWaveOut() + { + if (hWaveOut == IntPtr.Zero) + { + // If not already open + if (IsWaveOutOpened == false) + { + // Determine format + Win32.WAVEFORMATEX waveFormatEx = new Win32.WAVEFORMATEX(); + waveFormatEx.wFormatTag = (ushort)Win32.WaveFormatFlags.WAVE_FORMAT_PCM; + waveFormatEx.nChannels = (ushort)Channels; + waveFormatEx.nSamplesPerSec = (ushort)SamplesPerSecond; + waveFormatEx.wBitsPerSample = (ushort)BitsPerSample; + waveFormatEx.nBlockAlign = (ushort)((waveFormatEx.wBitsPerSample * waveFormatEx.nChannels) >> 3); + waveFormatEx.nAvgBytesPerSec = (uint)(waveFormatEx.nBlockAlign * waveFormatEx.nSamplesPerSec); + + // Determine WaveOut device + int deviceId = WinSound.GetWaveOutDeviceIdByName(WaveOutDeviceName); + + // Open WaveIn device + Win32.MMRESULT hr = Win32.waveOutOpen(ref hWaveOut, deviceId, ref waveFormatEx, delegateWaveOutProc, 0, (int)Win32.WaveProcFlags.CALLBACK_FUNCTION); + + // If not successful + if (hr != Win32.MMRESULT.MMSYSERR_NOERROR) + { + IsWaveOutOpened = false; + return false; + } + + // Lock handle + GCHandle.Alloc(hWaveOut, GCHandleType.Pinned); + } + } + + IsWaveOutOpened = true; + return true; + } + + // Start + public bool Start(string waveInDeviceName, string waveOutDeviceName, int samplesPerSecond, int bitsPerSample, int channels, int bufferCount, int bufferSize) + { + try + { + lock (Locker) + { + // If the thread is still running + if (IsThreadPlayWaveInRunning) + { + // Wait until thread ends + IsThreadPlayWaveInRunning = false; + AutoResetEventDataRecorded.Set(); + AutoResetEventThreadPlayWaveInEnd.WaitOne(5000); + } + + // If not already started + if (Started == false) + { + + // take over data + WaveInDeviceName = waveInDeviceName; + WaveOutDeviceName = waveOutDeviceName; + SamplesPerSecond = samplesPerSecond; + BitsPerSample = bitsPerSample; + Channels = channels; + BufferCount = bufferCount; + BufferSize = bufferSize; + CopyDataBuffer = new Byte[BufferSize]; + GCCopyDataBuffer = GCHandle.Alloc(CopyDataBuffer, GCHandleType.Pinned); + + // WaveOut + if (StartWaveOut()) + { + // WaveIn + return StartWaveIn(); + } + // Error opening WaveOut + return false; + } + + // Repeater is already running + return false; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Start | {0}", ex.Message)); + return false; + } + } + + // ChangeWaveIn + public bool ChangeWaveIn(string waveInDeviceName) + { + try + { + // Change + this.WaveInDeviceName = waveInDeviceName; + + // Restart + if (Started) + { + CloseWaveIn(); + return StartWaveIn(); + } + return true; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("ChangeWaveIn() | {0}", ex.Message)); + return false; + } + } + + // ChangeWaveOut + public bool ChangeWaveOut(string waveOutDeviceName) + { + try + { + // Change + this.WaveOutDeviceName = waveOutDeviceName; + + // Restart + if (Started) + { + CloseWaveOut(); + return StartWaveOut(); + } + return true; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("ChangeWaveOut() | {0}", ex.Message)); + return false; + } + } + + // StartWaveIn + private bool StartWaveIn() + { + // If WaveIn could become + if (OpenWaveIn()) + { + // If all buffers could be created + if (CreateWaveInHeaders()) + { + // When recording could start + Win32.MMRESULT hr = Win32.waveInStart(hWaveIn); + if (hr == Win32.MMRESULT.MMSYSERR_NOERROR) + { + IsWaveInStarted = true; + Stopped = false; + + // Start thread + StartThreadPlayWaveIn(); + return true; + } + else + { + // Error starting + return false; + } + } + } + // WaveIn could not be opened + return false; + } + + // OpenWaveOut + private bool StartWaveOut() + { + if (OpenWaveOut()) + { + return CreateWaveOutHeaders(); + } + return false; + } + + // Stop + public bool Stop() + { + try + { + lock (Locker) + { + // When started + if (GCCopyDataBuffer.IsAllocated) + { + // End WaveIn + CloseWaveIn(); + + // Quit WaveOut + CloseWaveOut(); + + // Free up memory + GCCopyDataBuffer.Free(); + + // Ready + return true; + } + return false; + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Stop | {0}", ex.Message)); + return false; + } + } + + // CloseWaveIn + private void CloseWaveIn() + { + // Set as manually ended + Stopped = true; + IsThreadPlayWaveInRunning = false; + AutoResetEventDataRecorded.Set(); + + // Stop WaveIn + Win32.MMRESULT hResult = Win32.waveInStop(hWaveIn); + + // Set buffer as processed + int resetCount = 0; + while (IsAnyWaveInHeaderInState(Win32.WaveHdrFlags.WHDR_INQUEUE) & resetCount < 20) + { + Win32.MMRESULT hr = Win32.waveInReset(hWaveIn); + System.Threading.Thread.Sleep(50); + resetCount++; + } + + // Release header handles (before waveInClose) + FreeWaveInHeaders(); + + // Close + while (Win32.waveInClose(hWaveIn) == Win32.MMRESULT.WAVERR_STILLPLAYING) + { + System.Threading.Thread.Sleep(50); + } + } + + // CloseWaveOut + private void CloseWaveOut() + { + // Stop + IsWaveOutOpened = false; + Win32.MMRESULT hr = Win32.waveOutReset(hWaveOut); + + // Wait until everything plays + while (IsAnyWaveOutHeaderInState(Win32.WaveHdrFlags.WHDR_INQUEUE)) + { + System.Threading.Thread.Sleep(50); + } + + // Release header handles + FreeWaveOutHeaders(); + + // Close + hr = Win32.waveOutClose(hWaveOut); + } + + // IsAnyWaveInHeaderInState + private bool IsAnyWaveInHeaderInState(Win32.WaveHdrFlags state) + { + for (int i = 0; i < WaveInHeaders.Length; i++) + { + if ((WaveInHeaders[i]->dwFlags & state) == state) + { + return true; + } + } + return false; + } + + // IsAnyWaveOutHeaderInState + private bool IsAnyWaveOutHeaderInState(Win32.WaveHdrFlags state) + { + for (int i = 0; i < WaveOutHeaders.Length; i++) + { + if ((WaveOutHeaders[i]->dwFlags & state) == state) + { + return true; + } + } + return false; + } + + // waveOutProc + private void waveOutProc(IntPtr hWaveOut, Win32.WOM_Messages msg, IntPtr dwInstance, Win32.WAVEHDR* pWaveHeader, IntPtr lParam) + { + switch (msg) + { + // Open + case Win32.WOM_Messages.OPEN: + break; + + // Close + case Win32.WOM_Messages.CLOSE: + IsWaveOutOpened = false; + AutoResetEventDataRecorded.Set(); + this.hWaveOut = IntPtr.Zero; + break; + } + } + + // waveInProc + private void waveInProc(IntPtr hWaveIn, Win32.WIM_Messages msg, IntPtr dwInstance, Win32.WAVEHDR* waveHeader, IntPtr lParam) + { + + switch (msg) + { + // Open + case Win32.WIM_Messages.OPEN: + break; + + // Data + case Win32.WIM_Messages.DATA: + + // Data has arrived + IsDataIncomming = true; + + // Remember recorded buffer + CurrentRecordedHeader = waveHeader; + + // Set event + AutoResetEventDataRecorded.Set(); + break; + + //Close + case Win32.WIM_Messages.CLOSE: + IsDataIncomming = false; + IsWaveInOpened = false; + Stopped = true; + AutoResetEventDataRecorded.Set(); + this.hWaveIn = IntPtr.Zero; + break; + } + } + + // OnThreadRecording + private void OnThreadPlayWaveIn() + { + while (IsThreadPlayWaveInRunning && !Stopped) + { + // Wait until recording is finished + AutoResetEventDataRecorded.WaitOne(); + + try + { + + if (IsThreadPlayWaveInRunning && IsDataIncomming && IsWaveOutOpened && IsMute == false) + { + // Determine the next free playback buffer + for (int i = 0; i < WaveOutHeaders.Length; i++) + { + if ((WaveOutHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) == 0) + { + try + { + // Copy data to playback buffer + Marshal.Copy(CurrentRecordedHeader->lpData, CopyDataBuffer, 0, CopyDataBuffer.Length); + Marshal.Copy(CopyDataBuffer, 0, WaveOutHeaders[i]->lpData, CopyDataBuffer.Length); + + // Play data + Win32.MMRESULT hr = Win32.waveOutWrite(hWaveOut, WaveOutHeaders[i], sizeof(Win32.WAVEHDR)); + break; + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(ex.Message); + } + } + } + } + + if (IsThreadPlayWaveInRunning && !Stopped) + { + // Keep recording + for (int i = 0; i < WaveInHeaders.Length; i++) + { + if ((WaveInHeaders[i]->dwFlags & Win32.WaveHdrFlags.WHDR_INQUEUE) == 0) + { + Win32.MMRESULT hr = Win32.waveInAddBuffer(hWaveIn, WaveInHeaders[i], sizeof(Win32.WAVEHDR)); + } + } + } + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(ex.Message); + } + } + + + // Set variables + IsWaveInStarted = false; + IsThreadPlayWaveInRunning = false; + AutoResetEventThreadPlayWaveInEnd.Set(); + + // Send event + if (RepeaterStopped != null) + { + try + { + RepeaterStopped(); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Repeater Stopped | {0}", ex.Message)); + } + } + } + } +} diff --git a/AudioWaveOutClassLibrary/Timer.cs b/AudioWaveOutClassLibrary/Timer.cs new file mode 100644 index 0000000..b802e77 --- /dev/null +++ b/AudioWaveOutClassLibrary/Timer.cs @@ -0,0 +1,339 @@ +//---------------------------------------------------------------------------- +// File Name: Timer.cs +// +// Description: +// Implement various types of timers, That based && defined into Win32.cs Class +// Timers: QueueTimer, EventTimer, Stopwatch +// Timer resolution - the smallest unit of time that can be accurately measured by +// that timer +// +// Author(s): +// Egor Waken +// +// History: +// 06 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +using System.Runtime.InteropServices; + +namespace AudioWaveOut +{ + // QueueTimer + public class QueueTimer + { + // Constructor + public QueueTimer() + { + m_DelegateTimerProc = new global::AudioWaveOut.Win32.DelegateTimerProc(OnTimer); + } + + // Variables + private bool m_IsRunning = false; + private uint m_Milliseconds = 20; + private IntPtr m_HandleTimer = IntPtr.Zero; + private GCHandle m_GCHandleTimer; + private uint m_ResolutionInMilliseconds = 0; + private IntPtr m_HandleTimerQueue; + private GCHandle m_GCHandleTimerQueue; + + //Delegates And Events + private global::AudioWaveOut.Win32.DelegateTimerProc m_DelegateTimerProc; + public delegate void DelegateTimerTick(); + public event DelegateTimerTick TimerTick; + + // IsRunning + public bool IsRunning + { + get + { + return m_IsRunning; + } + } + + // Milliseconds + public uint Milliseconds + { + get + { + return m_Milliseconds; + } + } + + // ResolutionInMilliseconds + public uint ResolutionInMilliseconds + { + get + { + return m_ResolutionInMilliseconds; + } + } + + // SetBestResolution + public static void SetBestResolution() + { + // QueueTimer Determine resolution + global::AudioWaveOut.Win32.TimeCaps tc = new global::AudioWaveOut.Win32.TimeCaps(); + global::AudioWaveOut.Win32.TimeGetDevCaps(ref tc, (uint)Marshal.SizeOf(typeof(global::AudioWaveOut.Win32.TimeCaps))); + uint resolution = Math.Max(tc.wPeriodMin, 0); + + // QueueTimer Set resolution + global::AudioWaveOut.Win32.TimeBeginPeriod(resolution); + } + + // ResetResolution + public static void ResetResolution() + { + // QueueTimer Determine resolution + global::AudioWaveOut.Win32.TimeCaps tc = new global::AudioWaveOut.Win32.TimeCaps(); + global::AudioWaveOut.Win32.TimeGetDevCaps(ref tc, (uint)Marshal.SizeOf(typeof(global::AudioWaveOut.Win32.TimeCaps))); + uint resolution = Math.Max(tc.wPeriodMin, 0); + + // QueueTimer Resolution deactivate + global::AudioWaveOut.Win32.TimeBeginPeriod(resolution); + } + + // Start + public void Start(uint milliseconds, uint dueTimeInMilliseconds) + { + // Take Values + m_Milliseconds = milliseconds; + + // Determine QueueTimer resolution + global::AudioWaveOut.Win32.TimeCaps tc = new global::AudioWaveOut.Win32.TimeCaps(); + global::AudioWaveOut.Win32.TimeGetDevCaps(ref tc, (uint)Marshal.SizeOf(typeof(global::AudioWaveOut.Win32.TimeCaps))); + m_ResolutionInMilliseconds = Math.Max(tc.wPeriodMin, 0); + + // Set QueueTimer Resolution + global::AudioWaveOut.Win32.TimeBeginPeriod(m_ResolutionInMilliseconds); + + // QueueTimer Create queue + m_HandleTimerQueue = global::AudioWaveOut.Win32.CreateTimerQueue(); + m_GCHandleTimerQueue = GCHandle.Alloc(m_HandleTimerQueue); + + // Try starting QueueTimer + bool resultCreate = global::AudioWaveOut.Win32.CreateTimerQueueTimer(out m_HandleTimer, m_HandleTimerQueue, m_DelegateTimerProc, IntPtr.Zero, dueTimeInMilliseconds, m_Milliseconds, global::AudioWaveOut.Win32.WT_EXECUTEINTIMERTHREAD); + if (resultCreate) + { + // Hold handle in memory + m_GCHandleTimer = GCHandle.Alloc(m_HandleTimer, GCHandleType.Pinned); + + // QueueTimer has started + m_IsRunning = true; + } + } + + // Stop + public void Stop() + { + if (m_HandleTimer != IntPtr.Zero) + { + // End QueueTimer + global::AudioWaveOut.Win32.DeleteTimerQueueTimer(IntPtr.Zero, m_HandleTimer, IntPtr.Zero); + + // End QueueTimer Resolution + global::AudioWaveOut.Win32.TimeEndPeriod(m_ResolutionInMilliseconds); + + // QueueTimer Delete queue + if (m_HandleTimerQueue != IntPtr.Zero) + { + global::AudioWaveOut.Win32.DeleteTimerQueue(m_HandleTimerQueue); + } + + // Release handles + if (m_GCHandleTimer.IsAllocated) + { + m_GCHandleTimer.Free(); + } + if (m_GCHandleTimerQueue.IsAllocated) + { + m_GCHandleTimerQueue.Free(); + } + + // Set variables + m_HandleTimer = IntPtr.Zero; + m_HandleTimerQueue = IntPtr.Zero; + m_IsRunning = false; + } + } + + // OnTimer + private void OnTimer(IntPtr lpParameter, bool TimerOrWaitFired) + { + if (TimerTick != null) + { + TimerTick(); + } + } + } + + // EventTimer + public class EventTimer + { + // Constructor + public EventTimer() + { + m_DelegateTimeEvent = new global::AudioWaveOut.Win32.TimerEventHandler(OnTimer); + } + + // Variables + private bool m_IsRunning = false; + private uint m_Milliseconds = 20; + private UInt32 m_TimerId = 0; + private GCHandle m_GCHandleTimer; + private UInt32 m_UserData = 0; + private uint m_ResolutionInMilliseconds = 0; + + // Delegates And Events + private global::AudioWaveOut.Win32.TimerEventHandler m_DelegateTimeEvent; + public delegate void DelegateTimerTick(); + public event DelegateTimerTick TimerTick; + + // IsRunning + public bool IsRunning + { + get + { + return m_IsRunning; + } + } + + // Milliseconds + public uint Milliseconds + { + get + { + return m_Milliseconds; + } + } + + // ResolutionInMilliseconds + public uint ResolutionInMilliseconds + { + get + { + return m_ResolutionInMilliseconds; + } + } + + // SetBestResolution + public static void SetBestResolution() + { + // Determine QueueTimer resolution + global::AudioWaveOut.Win32.TimeCaps tc = new global::AudioWaveOut.Win32.TimeCaps(); + global::AudioWaveOut.Win32.TimeGetDevCaps(ref tc, (uint)Marshal.SizeOf(typeof(global::AudioWaveOut.Win32.TimeCaps))); + uint resolution = Math.Max(tc.wPeriodMin, 0); + + // Set QueueTimer Resolution + global::AudioWaveOut.Win32.TimeBeginPeriod(resolution); + } + + // ResetResolution + public static void ResetResolution() + { + // Determine QueueTimer resolution + global::AudioWaveOut.Win32.TimeCaps tc = new global::AudioWaveOut.Win32.TimeCaps(); + global::AudioWaveOut.Win32.TimeGetDevCaps(ref tc, (uint)Marshal.SizeOf(typeof(global::AudioWaveOut.Win32.TimeCaps))); + uint resolution = Math.Max(tc.wPeriodMin, 0); + + // Disable QueueTimer Resolution + global::AudioWaveOut.Win32.TimeEndPeriod(resolution); + } + + // Start + public void Start(uint milliseconds, uint dueTimeInMilliseconds) + { + // Take values + m_Milliseconds = milliseconds; + + // Determine timer resolution + global::AudioWaveOut.Win32.TimeCaps tc = new global::AudioWaveOut.Win32.TimeCaps(); + global::AudioWaveOut.Win32.TimeGetDevCaps(ref tc, (uint)Marshal.SizeOf(typeof(global::AudioWaveOut.Win32.TimeCaps))); + m_ResolutionInMilliseconds = Math.Max(tc.wPeriodMin, 0); + + // Set timer resolution + global::AudioWaveOut.Win32.TimeBeginPeriod(m_ResolutionInMilliseconds); + + // Try starting EventTimer + m_TimerId = global::AudioWaveOut.Win32.TimeSetEvent(m_Milliseconds, m_ResolutionInMilliseconds, m_DelegateTimeEvent, ref m_UserData, (UInt32)Win32.TIME_PERIODIC); + if (m_TimerId > 0) + { + // Hold handle in memory + m_GCHandleTimer = GCHandle.Alloc(m_TimerId, GCHandleType.Pinned); + + // QueueTimer has started + m_IsRunning = true; + } + } + + // Stop + public void Stop() + { + if (m_TimerId > 0) + { + // End timer + global::AudioWaveOut.Win32.TimeKillEvent(m_TimerId); + + // End timer resolution + global::AudioWaveOut.Win32.TimeEndPeriod(m_ResolutionInMilliseconds); + + // Release handles + if (m_GCHandleTimer.IsAllocated) + { + m_GCHandleTimer.Free(); + } + + // Set variables + m_TimerId = 0; + m_IsRunning = false; + } + } + + // OnTimer + private void OnTimer(UInt32 id, UInt32 msg, ref UInt32 userCtx, UInt32 rsv1, UInt32 rsv2) + { + if (TimerTick != null) + { + TimerTick(); + } + } + } + + // Stopwatch + public class Stopwatch + { + // Constructor + public Stopwatch() + { + // Check + if (Win32.QueryPerformanceFrequency(out m_Frequency) == false) + { + throw new Exception("High Performance counter not supported"); + } + } + + // Variables + private long m_StartTime = 0; + private long m_DurationTime = 0; + private long m_Frequency; + + // Start + public void Start() + { + Win32.QueryPerformanceCounter(out m_StartTime); + m_DurationTime = m_StartTime; + } + + // ElapsedMilliseconds + public double ElapsedMilliseconds + { + get + { + Win32.QueryPerformanceCounter(out m_DurationTime); + return (double)(m_DurationTime - m_StartTime) / (double)m_Frequency * 1000; + } + } + } +} diff --git a/AudioWaveOutClassLibrary/Utils.cs b/AudioWaveOutClassLibrary/Utils.cs new file mode 100644 index 0000000..0c5fe2f --- /dev/null +++ b/AudioWaveOutClassLibrary/Utils.cs @@ -0,0 +1,316 @@ +//---------------------------------------------------------------------------- +// File Name: Utils.cs +// +// Description: +// Convert audio data from mu-law to linear and linear to mu-law +// +// Implementing an audio `sample' that represent is a single output value from an A/D converter, +// i.e., a small integer number (usually 8 or 16 bits), and audio data is just a series of such +// samples. It can be characterized by three parameters: the sampling rate (measured in samples +// per second or Hz, e.g., 8000 or 44100), the number of bits per sample (e.g., 8 or 16), +// and the number of channels (1 for mono, 2 for stereo, etc.) +// +// For more detailed information, read the Article +// https://www.dm.unibo.it/~achilles/calc/octave.html/Audio-Processing.html +// +// Author(s): +// Egor Waken +// +// History: +// 06 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +namespace AudioWaveOut +{ + // Utils + public class Utils + { + // Constructor + public Utils() + { + + } + + // Const Data + const int SIGN_BIT = (0x80); + const int QUANT_MASK = (0xf); + const int NSEGS = (8); + const int SEG_SHIFT = (4); + const int SEG_MASK = (0x70); + const int BIAS = (0x84); + const int CLIP = 8159; + static short[] seg_uend = new short[] { 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF }; + + // GetBytesPerInterval + public static int GetBytesPerInterval(uint SamplesPerSecond, int BitsPerSample, int Channels) + { + int blockAlign = ((BitsPerSample * Channels) >> 3); + int bytesPerSec = (int)(blockAlign * SamplesPerSecond); + uint sleepIntervalFactor = 1000 / 20; //20 Milliseconds + int bytesPerInterval = (int)(bytesPerSec / sleepIntervalFactor); + + // Ready + return bytesPerInterval; + } + + // Mu-law To Linear + // Convert audio data from mu-law to linear + public static Int32 MulawToLinear(Int32 ulaw) + { + ulaw = ~ulaw; + int t = ((ulaw & QUANT_MASK) << 3) + BIAS; + t <<= (ulaw & SEG_MASK) >> SEG_SHIFT; + return ((ulaw & SIGN_BIT) > 0 ? (BIAS - t) : (t - BIAS)); + } + + // Help Method to Search, Using with Convert the scaled magnitude to segment number + static short Search(short val, short[] table, short size) + { + short i; + int index = 0; + for (i = 0; i < size; i++) + { + if (val <= table[index]) + { + return (i); + } + index++; + } + return (size); + } + + // Linear To Mu-law. + // Convert audio data from mu-law to linear + public static Byte LinearToMulaw(short pcm_val) + { + short mask = 0; + short seg = 0; + Byte uval = 0; + + // Get the sign and the magnitude of the value. + pcm_val = (short)(pcm_val >> 2); + if (pcm_val < 0) + { + pcm_val = (short)-pcm_val; + mask = 0x7F; + } + else + { + mask = 0xFF; + } + + // Clip the Magnitude + if (pcm_val > CLIP) + { + pcm_val = CLIP; + } + pcm_val += (BIAS >> 2); + + // Convert the scaled magnitude to segment number. + seg = Search(pcm_val, seg_uend, (short)8); + + + // Combine the sign, segment, quantization bits; + // and complement the code word. + + // Out of range, return maximum value. + if (seg >= 8) + { + return (Byte)(0x7F ^ mask); + } + else + { + uval = (Byte)((seg << 4) | ((pcm_val >> (seg + 1)) & 0xF)); + return ((Byte)(uval ^ mask)); + } + } + + // Mu-Law To Linear + public static Byte[] MuLawToLinear(Byte[] bytes, int bitsPerSample, int channels) + { + // Number of tracks + int blockAlign = channels * bitsPerSample / 8; + + // For every value + Byte[] result = new Byte[bytes.Length * blockAlign]; + for (int i = 0, counter = 0; i < bytes.Length; i++, counter += blockAlign) + { + // Convert to bytes + int value = MulawToLinear(bytes[i]); + Byte[] values = BitConverter.GetBytes(value); + + switch (bitsPerSample) + { + case 8: + switch (channels) + { + // 8 Bit 1 Channel + case 1: + result[counter] = values[0]; + break; + + // 8 Bit 2 Channel + case 2: + result[counter] = values[0]; + result[counter + 1] = values[0]; + break; + } + break; + + case 16: + switch (channels) + { + // 16 Bit 1 Channel + case 1: + result[counter] = values[0]; + result[counter + 1] = values[1]; + break; + + // 16 Bit 2 Channels + case 2: + result[counter] = values[0]; + result[counter + 1] = values[1]; + result[counter + 2] = values[0]; + result[counter + 3] = values[1]; + break; + } + break; + } + } + + // Ready + return result; + } + + /// Mu-Law To Linear with the number of bits per sample 32 + public static int[] MuLawToLinear32(Byte[] bytes, int bitsPerSample, int channels) + { + // Number of tracks + int blockAlign = channels; + + // For every value + int[] result = new int[bytes.Length * blockAlign]; + for (int i = 0, counter = 0; i < bytes.Length; i++, counter += blockAlign) + { + // Convert to Int32 + int value = MulawToLinear(bytes[i]); + + switch (bitsPerSample) + { + case 8: + switch (channels) + { + // 8 Bit 1 Channel + case 1: + result[counter] = value; + break; + + // 8 Bit 2 Channel + case 2: + result[counter] = value; + result[counter + 1] = value; + break; + } + break; + + case 16: + switch (channels) + { + // 16 Bit 1 Channel + case 1: + result[counter] = value; + break; + + // 16 Bit 2 Channels + case 2: + result[counter] = value; + result[counter + 1] = value; + break; + } + break; + } + } + + // Ready + return result; + } + + // Linear To Mu-Law + public static Byte[] LinearToMulaw(Byte[] bytes, int bitsPerSample, int channels) + { + // Number of tracks + int blockAlign = channels * bitsPerSample / 8; + + // Result + Byte[] result = new Byte[bytes.Length / blockAlign]; + int resultIndex = 0; + for (int i = 0; i < result.Length; i++) + { + // Depending on the resolution + switch (bitsPerSample) + { + case 8: + switch (channels) + { + // 8 Bit 1 Channel + case 1: + result[i] = LinearToMulaw(bytes[resultIndex]); + resultIndex += 1; + break; + + // 8 Bit 2 Channel + case 2: + result[i] = LinearToMulaw(bytes[resultIndex]); + resultIndex += 2; + break; + } + break; + + case 16: + switch (channels) + { + // 16 Bit 1 Channel + case 1: + result[i] = LinearToMulaw(BitConverter.ToInt16(bytes, resultIndex)); + resultIndex += 2; + break; + + // 16 Bit 2 Channels + case 2: + result[i] = LinearToMulaw(BitConverter.ToInt16(bytes, resultIndex)); + resultIndex += 4; + break; + } + break; + } + } + + // Ready + return result; + } + + // Get Standard Derivation + public static double GetStandardDerivation(System.Collections.Generic.List list) + { + // Copy + List listCopy = new List(list); + + // Calculate average + double average = listCopy.Average(); + + // Sums of squares of improvements + double sum = 0; + foreach (double value in listCopy) + { + double diff = average - value; + sum += Math.Pow(diff, 2); + } + + // Result + return Math.Sqrt(sum / (listCopy.Count - 1)); + } + } +} diff --git a/AudioWaveOutClassLibrary/WaveFile.cs b/AudioWaveOutClassLibrary/WaveFile.cs new file mode 100644 index 0000000..ade605e --- /dev/null +++ b/AudioWaveOutClassLibrary/WaveFile.cs @@ -0,0 +1,325 @@ +//---------------------------------------------------------------------------- +// File Name: WaveFile.cs +// +// Description: +// The WAVE file format is a subset of Microsoft's RIFF specification for the storage +// of multimedia files. A RIFF file starts out with a file header followed by a sequence +// of data chunks +// +// For more detailed information, read the documentation +// http://soundfile.sapp.org/doc/WaveFormat/ +// +// Author(s): +// Egor Waken +// +// History: +// 05 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +using System.Text; + +namespace AudioWaveOut +{ + // WaveFile + public class WaveFile + { + // Constructor + public WaveFile() + { + + } + + // Const Data + public const int WAVE_FORMAT_PCM = 1; + + // Create New WaveFile + public static void Create(string fileName, uint samplesPerSecond, short bitsPerSample, short channels, Byte[] data) + { + // Delete existing file + if (System.IO.File.Exists(fileName)) + { + System.IO.File.Delete(fileName); + } + + // Create header + WaveFileHeader header = CreateNewWaveFileHeader(samplesPerSecond, bitsPerSample, channels, (uint)(data.Length), 44 + data.Length); + + // Write header + WriteHeader(fileName, header); + + // Write data + WriteData(fileName, header.DATAPos, data); + } + + + // Append Data To existing file + public static void AppendData(string fileName, Byte[] data) + { + AppendData(fileName, data, false); + } + + // Append Data To existing file + public static void AppendData(string fileName, Byte[] data, bool forceWriting) + { + // Read header + WaveFileHeader header = ReadHeader(fileName); + + // If data exists + if (header.DATASize > 0 || forceWriting) + { + // Add data + WriteData(fileName, (int)(header.DATAPos + header.DATASize), data); + + // Update headers + header.DATASize += (uint)data.Length; + header.RiffSize += (uint)data.Length; + + // Overwrite header + WriteHeader(fileName, header); + } + } + + // Read + public static WaveFileHeader Read(string fileName) + { + // Read headers + WaveFileHeader header = ReadHeader(fileName); + + // Ready + return header; + } + + // CreateWaveFileHeader + private static WaveFileHeader CreateNewWaveFileHeader(uint SamplesPerSecond, short BitsPerSample, short Channels, uint dataSize, long fileSize) + { + // Create header + WaveFileHeader Header = new WaveFileHeader(); + + // Set values + Array.Copy("RIFF".ToArray(), Header.RIFF, 4); + Header.RiffSize = (uint)(fileSize - 8); + Array.Copy("WAVE".ToArray(), Header.RiffFormat, 4); + Array.Copy("fmt ".ToArray(), Header.FMT, 4); + Header.FMTSize = 16; + Header.AudioFormat = WAVE_FORMAT_PCM; + Header.Channels = (short)Channels; + Header.SamplesPerSecond = (uint)SamplesPerSecond; + Header.BitsPerSample = (short)BitsPerSample; + Header.BlockAlign = (short)((BitsPerSample * Channels) >> 3); + Header.BytesPerSecond = (uint)(Header.BlockAlign * Header.SamplesPerSecond); + Array.Copy("data".ToArray(), Header.DATA, 4); + Header.DATASize = dataSize; + + // Ready + return Header; + } + + // Read Header + private static WaveFileHeader ReadHeader(string fileName) + { + // Result + WaveFileHeader header = new WaveFileHeader(); + + // If the file exists + if (File.Exists(fileName)) + { + // Open file + FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + System.IO.BinaryReader rd = new System.IO.BinaryReader(fs, Encoding.UTF8); + + // To read + if (fs.CanRead) + { + // Chunk 1 + header.RIFF = rd.ReadChars(4); + header.RiffSize = (uint)rd.ReadInt32(); + header.RiffFormat = rd.ReadChars(4); + + // Chunk 2 + header.FMT = rd.ReadChars(4); + header.FMTSize = (uint)rd.ReadInt32(); + header.FMTPos = fs.Position; + header.AudioFormat = (short)rd.ReadInt16(); + header.Channels = (short)rd.ReadInt16(); + header.SamplesPerSecond = (uint)rd.ReadInt32(); + header.BytesPerSecond = (uint)rd.ReadInt32(); + header.BlockAlign = (short)rd.ReadInt16(); + header.BitsPerSample = (short)rd.ReadInt16(); + + // Go to the beginning of Chunk3 + fs.Seek(header.FMTPos + header.FMTSize, SeekOrigin.Begin); + + // Chunk 3 + header.DATA = rd.ReadChars(4); + header.DATASize = (uint)rd.ReadInt32(); + header.DATAPos = (int)fs.Position; + + // If not DATA + if (new String(header.DATA).ToUpper() != "DATA") + { + uint DataChunkSize = header.DATASize + 8; + fs.Seek(DataChunkSize, SeekOrigin.Current); + header.DATASize = (uint)(fs.Length - header.DATAPos - DataChunkSize); + } + + // Read payload + if (header.DATASize <= fs.Length - header.DATAPos) + { + header.Payload = rd.ReadBytes((int)header.DATASize); + } + } + + // Close + rd.Close(); + fs.Close(); + } + + // Ready + return header; + } + + // WriteHeader + public static void WriteHeader(string fileName, WaveFileHeader header) + { + // Open file + FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + System.IO.BinaryWriter wr = new System.IO.BinaryWriter(fs, Encoding.UTF8); + + // Chunk 1 + wr.Write(header.RIFF); + wr.Write(Int32ToBytes((int)header.RiffSize)); + wr.Write(header.RiffFormat); + + // Chunk 2 + wr.Write(header.FMT); + wr.Write(Int32ToBytes((int)header.FMTSize)); + wr.Write(Int16ToBytes(header.AudioFormat)); + wr.Write(Int16ToBytes(header.Channels)); + wr.Write(Int32ToBytes((int)header.SamplesPerSecond)); + wr.Write(Int32ToBytes((int)header.BytesPerSecond)); + wr.Write(Int16ToBytes((short)header.BlockAlign)); + wr.Write(Int16ToBytes((short)header.BitsPerSample)); + + // Chunk 3 + wr.Write(header.DATA); + wr.Write(Int32ToBytes((int)header.DATASize)); + + // Close file + wr.Close(); + fs.Close(); + } + + // WriteData + public static void WriteData(string fileName, int pos, Byte[] data) + { + // Open file + FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + System.IO.BinaryWriter wr = new System.IO.BinaryWriter(fs, Encoding.UTF8); + + // Go to writing position + wr.Seek(pos, System.IO.SeekOrigin.Begin); + + // Write data + wr.Write(data); + + //Ready + wr.Close(); + fs.Close(); + } + + // BytesToInt32 + private static int BytesToInt32(ref Byte[] bytes) + { + int Int32 = 0; + Int32 = (Int32 << 8) + bytes[3]; + Int32 = (Int32 << 8) + bytes[2]; + Int32 = (Int32 << 8) + bytes[1]; + Int32 = (Int32 << 8) + bytes[0]; + return Int32; + } + + // BytesToInt16 + private static short BytesToInt16(ref Byte[] bytes) + { + short Int16 = 0; + Int16 = (short)((Int16 << 8) + bytes[1]); + Int16 = (short)((Int16 << 8) + bytes[0]); + return Int16; + } + + // Int32ToByte + private static Byte[] Int32ToBytes(int value) + { + Byte[] bytes = new Byte[4]; + bytes[0] = (Byte)(value & 0xFF); + bytes[1] = (Byte)(value >> 8 & 0xFF); + bytes[2] = (Byte)(value >> 16 & 0xFF); + bytes[3] = (Byte)(value >> 24 & 0xFF); + return bytes; + } + + // Int16ToBytes + private static Byte[] Int16ToBytes(short value) + { + Byte[] bytes = new Byte[2]; + bytes[0] = (Byte)(value & 0xFF); + bytes[1] = (Byte)(value >> 8 & 0xFF); + return bytes; + } + } + + // WaveFileHeader + public class WaveFileHeader + { + // Constructor + public WaveFileHeader() + { + + } + + // Chunk 1 + public Char[] RIFF = new Char[4]; + public uint RiffSize = 8; + public Char[] RiffFormat = new Char[4]; + + // Chunk 2 + public Char[] FMT = new Char[4]; + public uint FMTSize = 16; + public short AudioFormat; + public short Channels; + public uint SamplesPerSecond; + public uint BytesPerSecond; + public short BlockAlign; + public short BitsPerSample; + + // Chunk 3 + public Char[] DATA = new Char[4]; + public uint DATASize; + + // Data + public Byte[] Payload = new Byte[0]; + + // Header Length + public int DATAPos = 44; + // Position FormatSize + public long FMTPos = 20; + + + // Duration + public TimeSpan Duration + { + get + { + int blockAlign = ((BitsPerSample * Channels) >> 3); + int bytesPerSec = (int)(blockAlign * SamplesPerSecond); + double value = (double)Payload.Length / (double)bytesPerSec; + + // Ready + return new TimeSpan(0, 0, (int)value); + } + } + } +} diff --git a/AudioWaveOutClassLibrary/Win32.cs b/AudioWaveOutClassLibrary/Win32.cs new file mode 100644 index 0000000..3ac08dd --- /dev/null +++ b/AudioWaveOutClassLibrary/Win32.cs @@ -0,0 +1,554 @@ +//---------------------------------------------------------------------------- +// File Name: Win32.cs +// +// Description: +// Win32 provides an audio handling using standart windows API WaveOut +// define necessary Win32 API Calls and classes +// +// Author(s): +// Egor Waken +// +// History: +// 30 Apr 2024 Egor Waken Created. +// 04 May 2024 Egor Waken Added Necessary Calls and classes. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +using System.Runtime.InteropServices; +using System.Text; + +namespace AudioWaveOut +{ + // Win32 Class + unsafe public class Win32 + { + // Const Data + public const int WAVE_MAPPER = -1; + public const int WT_EXECUTEDEFAULT = 0x00000000; + public const int WT_EXECUTEINIOTHREAD = 0x00000001; + public const int WT_EXECUTEINTIMERTHREAD = 0x00000020; + public const int WT_EXECUTEINPERSISTENTTHREAD = 0x00000080; + public const int TIME_ONESHOT = 0; + public const int TIME_PERIODIC = 1; + + // Events + public delegate void DelegateWaveOutProc(IntPtr hWaveOut, WOM_Messages msg, IntPtr dwInstance, Win32.WAVEHDR* pWaveHdr, IntPtr lParam); + public delegate void DelegateWaveInProc(IntPtr hWaveIn, WIM_Messages msg, IntPtr dwInstance, Win32.WAVEHDR* pWaveHdr, IntPtr lParam); + public delegate void DelegateTimerProc(IntPtr lpParameter, bool TimerOrWaitFired); + public delegate void TimerEventHandler(UInt32 id, UInt32 msg, ref UInt32 userCtx, UInt32 rsv1, UInt32 rsv2); + + // Constructor + public Win32() + { + //RuntimeInformation.IsOSPlatform(OSPlatform.Windows); + + } + + // This struct provides windows native waveOut implementation. + [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Auto)] + public struct WAVEOUTCAPS + { + /// + /// Manufacturer identifier for the device driver for the device. + /// + public short wMid; + /// + /// Product identifier for the device. + /// + public short wPid; + /// + /// Version number of the device driver for the device. + /// + public int vDriverVersion; + /// + /// Product name in a null-terminated string. + /// + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] + public string szPname; + /// + /// Standard formats that are supported. + /// + public uint dwFormats; + /// + /// Number specifying whether the device supports mono (1) or stereo (2) output. + /// + public short wChannels; + /// + /// Packing. + /// + public short wReserved; + /// + /// Optional functionality supported by the device. + /// + public int dwSupport; + } + + // Describes the capabilities of the audio input device. + [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Auto)] + public struct WAVEINCAPS + { + public short wMid; + public short wPid; + public int vDriverVersion; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] + public string szPname; + public uint dwFormats; + public short wChannels; + public short wReserved; + public int dwSupport; + } + + // This Struct represents WAVEFORMATEX structure. + [StructLayout(LayoutKind.Sequential)] + public struct WAVEFORMATEX + { + public ushort wFormatTag; + /// + /// Number of channels in the waveform-audio data. Monaural data uses one channel and stereo data + /// uses two channels. + /// + public ushort nChannels; + /// + /// Sample rate, in samples per second (hertz). If wFormatTag is WAVE_FORMAT_PCM, then common + /// values for nSamplesPerSec are 8.0 kHz, 11.025 kHz, 22.05 kHz, and 44.1 kHz. + /// + public uint nSamplesPerSec; + /// + /// Required average data-transfer rate, in bytes per second, for the format tag. If wFormatTag + /// is WAVE_FORMAT_PCM, nAvgBytesPerSec should be equal to the product of nSamplesPerSec and nBlockAlign. + /// + public uint nAvgBytesPerSec; + /// + /// Block alignment, in bytes. The block alignment is the minimum atomic unit of data for the wFormatTag + /// format type. If wFormatTag is WAVE_FORMAT_PCM or WAVE_FORMAT_EXTENSIBLE, nBlockAlign must be equal + /// to the product of nChannels and wBitsPerSample divided by 8 (bits per byte). + /// + public ushort nBlockAlign; + /// + /// Bits per sample for the wFormatTag format type. If wFormatTag is WAVE_FORMAT_PCM, then + /// wBitsPerSample should be equal to 8 or 16. + /// + public ushort wBitsPerSample; + /// + /// Size, in bytes, of extra format information appended to the end of the WAVEFORMATEX structure. + /// + public ushort cbSize; + } + + + // This Struct represents MMRESULT structure. + public enum MMRESULT : uint + { + MMSYSERR_NOERROR = 0, + MMSYSERR_ERROR = 1, + MMSYSERR_BADDEVICEID = 2, + MMSYSERR_NOTENABLED = 3, + MMSYSERR_ALLOCATED = 4, + MMSYSERR_INVALHANDLE = 5, + MMSYSERR_NODRIVER = 6, + MMSYSERR_NOMEM = 7, + MMSYSERR_NOTSUPPORTED = 8, + MMSYSERR_BADERRNUM = 9, + MMSYSERR_INVALFLAG = 10, + MMSYSERR_INVALPARAM = 11, + MMSYSERR_HANDLEBUSY = 12, + MMSYSERR_INVALIDALIAS = 13, + MMSYSERR_BADDB = 14, + MMSYSERR_KEYNOTFOUND = 15, + MMSYSERR_READERROR = 16, + MMSYSERR_WRITEERROR = 17, + MMSYSERR_DELETEERROR = 18, + MMSYSERR_VALNOTFOUND = 19, + MMSYSERR_NODRIVERCB = 20, + WAVERR_BADFORMAT = 32, + WAVERR_STILLPLAYING = 33, + WAVERR_UNPREPARED = 34 + } + + // This struct provides windows native waveOut Errors. + public enum MMSYSERR : uint + { + // Add MMSYSERR's here! + + MMSYSERR_BASE = 0x0000, + MMSYSERR_NOERROR = 0x0000 + } + + [Flags] + public enum WaveHdrFlags : uint + { + WHDR_DONE = 1, + WHDR_PREPARED = 2, + WHDR_BEGINLOOP = 4, + WHDR_ENDLOOP = 8, + WHDR_INQUEUE = 16 + } + + [Flags] + public enum WaveProcFlags : int + { + CALLBACK_NULL = 0, + CALLBACK_FUNCTION = 0x30000, + CALLBACK_EVENT = 0x50000, + CALLBACK_WINDOW = 0x10000, + CALLBACK_THREAD = 0x20000, + WAVE_FORMAT_QUERY = 1, + WAVE_MAPPED = 4, + WAVE_FORMAT_DIRECT = 8 + } + + [Flags] + public enum HRESULT : long + { + S_OK = 0L, + S_FALSE = 1L + } + + [Flags] + public enum WaveFormatFlags : int + { + WAVE_FORMAT_PCM = 0x0001 + } + + // This Struct represents WAVEHDR structure. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public struct WAVEHDR + { + /// + /// Long pointer to the address of the waveform buffer. + /// + public IntPtr lpData; // pointer to locked data buffer + /// + /// Specifies the length, in bytes, of the buffer. + /// + public uint dwBufferLength; // length of data buffer + /// + /// When the header is used in input, this member specifies how much data is in the buffer. + /// When the header is used in output, this member specifies the number of bytes played from the buffer. + /// + public uint dwBytesRecorded; // used for input only + /// + /// Specifies user data. + /// + public IntPtr dwUser; // for client's use + /// + /// Specifies information about the buffer. + /// + public WaveHdrFlags dwFlags; // assorted flags (see defines) + /// + /// Specifies the number of times to play the loop. + /// + public uint dwLoops; // loop control counter + /// + /// Reserved. This member is used within the audio driver to maintain a first-in, first-out linked list of headers awaiting playback. + /// + public IntPtr lpNext; // PWaveHdr, reserved for driver + /// + /// Reserved. + /// + public IntPtr reserved; // reserved for driver + } + + // TimeCaps + [StructLayout(LayoutKind.Sequential)] + public struct TimeCaps + { + public UInt32 wPeriodMin; + public UInt32 wPeriodMax; + }; + + // WOM_Messages + public enum WOM_Messages : int + { + OPEN = 0x03BB, + CLOSE = 0x03BC, + DONE = 0x03BD + } + + // WIM_Messages + public enum WIM_Messages : int + { + OPEN = 0x03BE, + CLOSE = 0x03BF, + DATA = 0x03C0 + } + + // Writes the number of cycles of the Performance Counter to a variable lpPerformanceCount + /// Performance Counter + [DllImport("Kernel32.dll", EntryPoint = "QueryPerformanceCounter")] + public static extern bool QueryPerformanceCounter(out long lpPerformanceCount); + + + // Writes the number of cycles of the Performance Frequency to a variable lpFrequency + /// Performance Frequency + [DllImport("Kernel32.dll", EntryPoint = "QueryPerformanceFrequency")] + public static extern bool QueryPerformanceFrequency(out long lpFrequency); + + + // The timeSetEvent function fires the specified media timer event. + // The media timer runs in its own thread. Once an event is fired, it calls the + // specified callback function or sets or causes the specified event to fire. + /// delay in ms + /// resolution(0 is the maximum available for a given PC), set in ms. + /// pointer to a procedure that will be called after a specified time interval has elapsed + /// This parameter is passed to the lpTimeProc handler and can be used at the discretion of the programmer + /// timer type.Two meanings possible + [DllImport("winmm.dll", SetLastError = true, EntryPoint = "timeSetEvent")] + public static extern UInt32 TimeSetEvent(UInt32 msDelay, UInt32 msResolution, TimerEventHandler handler, ref UInt32 userCtx, UInt32 eventType); + + + // After finishing working with the timer, you need to delete it using the timeKillEvent function: + /// number assigned to the timer when it was created using timeSetEvent + [DllImport("winmm.dll", SetLastError = true, EntryPoint = "timeKillEvent")] + public static extern UInt32 TimeKillEvent(UInt32 timerId); + + + // Create Timer Queue + [DllImport("kernel32.dll", EntryPoint = "CreateTimerQueue")] + public static extern IntPtr CreateTimerQueue(); + + + // Delete Timer Queue + /// number assigned to the Timer Queue when it was created using CreateTimerQueue + [DllImport("kernel32.dll", EntryPoint = "DeleteTimerQueue")] + public static extern bool DeleteTimerQueue(IntPtr TimerQueue); + + + // Create Timer Queue Timer + /// Pointer to a buffer that receives the timer queue's timer handle when returning + /// Handle to the timer queue. This handle is returned by the CreateTimerQueue function. + /// Pointer to an application-defined function to execute when the timer expires + /// The value of a single parameter that will be passed to the callback function. + /// The time in milliseconds relative to the current time that must pass before the first timer signal. + /// Timer period in milliseconds. If this parameter is zero, the timer receives the signal once + /// Timer Flags + [DllImport("kernel32.dll", EntryPoint = "CreateTimerQueueTimer")] + public static extern bool CreateTimerQueueTimer(out IntPtr phNewTimer, IntPtr TimerQueue, DelegateTimerProc Callback, IntPtr Parameter, uint DueTime, uint Period, uint Flags); + + + // Removes a timer from the timer queue and optionally waits for the current timer callbacks to complete before deleting the timer. + /// Handle to the timer queue. This handle is returned by the CreateTimerQueue function. + /// Queue timer handle. This handle is returned by the CreateTimerQueueTimer function + /// Handle to an event object that will signal when the system has canceled the timer and all callback functions have completed + [DllImport("kernel32.dll")] + public static extern bool DeleteTimerQueueTimer(IntPtr TimerQueue, IntPtr Timer, IntPtr CompletionEvent); + + + // function queries the timer device to determine its resolution. + /// + /// A pointer to a structure. + /// This structure is filled with information about the resolution of the timer device. + /// + /// + /// The size, in bytes, of the structure. + /// + /// + /// Returns if successful or an error code otherwise. + /// Possible error codes include the following. + /// : General error code. + /// : The parameter is , + /// or the parameter is invalid, or some other error occurred. + /// + [DllImport("winmm.dll", SetLastError = true, EntryPoint = "timeGetDevCaps")] + public static extern MMRESULT TimeGetDevCaps(ref TimeCaps timeCaps, UInt32 sizeTimeCaps); + + + // function requests a minimum resolution for periodic timers + /// Minimum timer resolution, in milliseconds, for the application or device driver. A lower value specifies a higher (more accurate) resolution. + /// + /// Returns if successful or + /// if the resolution specified in is out of range. + /// + [DllImport("winmm.dll", SetLastError = true, EntryPoint = "timeBeginPeriod")] + public static extern MMRESULT TimeBeginPeriod(UInt32 uPeriod); + + + // function clears a previously set minimum timer resolution. + /// + /// Minimum timer resolution specified in the previous call to the function. + /// + /// + /// Returns if successful or + /// if the resolution specified in is out of range. + /// + [DllImport("winmm.dll", SetLastError = true, EntryPoint = "timeEndPeriod")] + public static extern MMRESULT TimeEndPeriod(UInt32 uPeriod); + + + // The waveOutOpen function opens the given waveform-audio output device for playback. + /// Pointer to a buffer that receives a handle identifying the open waveform-audio output device. Use the handle to identify the device when calling other waveform-audio output functions. This parameter might be NULL if the WAVE_FORMAT_QUERY flag is specified for fdwOpen. + /// Identifier of the waveform-audio output device to open. It can be either a device identifier or a handle of an open waveform-audio input device. + /// Pointer to a WAVEFORMATEX structure that identifies the format of the waveform-audio data to be sent to the device. You can free this structure immediately after passing it to waveOutOpen. + /// Pointer to a fixed callback function, an event handle, a handle to a window, or the identifier of a thread to be called during waveform-audio playback to process messages related to the progress of the playback. If no callback function is required, this value can be zero. + /// User-instance data passed to the callback mechanism. + /// Flags for opening the device. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)] + public static extern MMRESULT waveOutOpen(ref IntPtr hWaveOut, int uDeviceID, ref WAVEFORMATEX lpFormat, DelegateWaveOutProc dwCallBack, int dwInstance, int dwFlags); + + + // The waveInOpen function opens the given waveform-audio input device for recording. + /// Pointer to a buffer that receives a handle identifying the open waveform-audio input device. + /// Identifier of the waveform-audio input device to open. It can be either a device identifier or a handle of an open waveform-audio input device. You can use the following flag instead of a device identifier. + /// Pointer to a WAVEFORMATEX structure that identifies the desired format for recording waveform-audio data. You can free this structure immediately after waveInOpen returns. + /// Pointer to a fixed callback function, an event handle, a handle to a window, + /// or the identifier of a thread to be called during waveform-audio recording to process messages related + /// to the progress of recording. If no callback function is required, this value can be zero. + /// For more information on the callback function, see waveInProc. + /// User-instance data passed to the callback mechanism. + /// Flags for opening the device. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll")] + public static extern MMRESULT waveInOpen(ref IntPtr hWaveIn, int deviceId, ref WAVEFORMATEX wfx, DelegateWaveInProc dwCallBack, int dwInstance, int dwFlags); + + + [DllImport("winmm.dll", SetLastError = true, EntryPoint = "waveInOpen")] + public static extern MMRESULT waveInOpen2(ref IntPtr hWaveIn, int deviceId, ref WAVEFORMATEX wfx, Microsoft.Win32.SafeHandles.SafeWaitHandle callBackEvent, int dwInstance, int dwFlags); + + + // Starts input on the given waveform-audio input device. + /// Handle to the waveform-audio input device. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true)] + public static extern MMRESULT waveInStart(IntPtr hWaveIn); + + + // Queries a specified waveform device to determine its capabilities. + /// Identifier of the waveform-audio input device. It can be either a device identifier or a Handle to an open waveform-audio output device. + /// Pointer to a WAVEOUTCAPS structure to be filled with information about the capabilities of the device. + /// Size, in bytes, of the WAVEOUTCAPS structure. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)] + public static extern uint waveInGetDevCaps(int index, ref WAVEINCAPS pwic, int cbwic); + + + // Get the waveInGetNumDevs function returns the number of waveform-audio input devices present in the system. + /// Returns the waveInGetNumDevs function returns the number of waveform-audio input devices present in the system. + /// + [DllImport("winmm.dll", SetLastError = true)] + public static extern uint waveInGetNumDevs(); + + + // Queries a specified waveform device to determine its capabilities. + /// Identifier of the waveform-audio output device. It can be either a device identifier or a Handle to an open waveform-audio output device. + /// Pointer to a WAVEOUTCAPS structure to be filled with information about the capabilities of the device. + /// Size, in bytes, of the WAVEOUTCAPS structure. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)] + public static extern uint waveOutGetDevCaps(int index, ref WAVEOUTCAPS pwoc, int cbwoc); + + + // Retrieves the number of waveform output devices present in the system. + /// The number of devices indicates success. Zero indicates that no devices are present or that an error occurred. + [DllImport("winmm.dll", SetLastError = true)] + public static extern uint waveOutGetNumDevs(); + + + // Sends a data block to the specified waveform output device. + /// Handle to the waveform-audio output device. + /// Pointer to a WAVEHDR structure containing information about the data block. + /// Size, in bytes, of the WAVEHDR structure. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)] + public static extern MMRESULT waveOutWrite(IntPtr hWaveOut, WAVEHDR* pwh, int cbwh); + + + // Prepares a waveform data block for playback. + /// Handle to the waveform-audio output device. + /// Pointer to a WAVEHDR structure that identifies the data block to be prepared. The buffer's base address must be aligned with the respect to the sample size. + /// Size, in bytes, of the WAVEHDR structure. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true, EntryPoint = "waveOutPrepareHeader", CharSet = CharSet.Auto)] + public static extern MMRESULT waveOutPrepareHeader(IntPtr hWaveOut, WAVEHDR* lpWaveOutHdr, int uSize); + + + // Cleans up the preparation performed by waveOutPrepareHeader. + /// Handle to the waveform-audio output device. + /// Pointer to a WAVEHDR structure identifying the data block to be cleaned up. + /// Size, in bytes, of the WAVEHDR structure. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true, EntryPoint = "waveOutUnprepareHeader", CharSet = CharSet.Auto)] + public static extern MMRESULT waveOutUnprepareHeader(IntPtr hWaveOut, WAVEHDR* lpWaveOutHdr, int uSize); + + + // Stops input on the given waveform-audio input device. + /// Handle to the waveform-audio input device. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", EntryPoint = "waveInStop", SetLastError = true)] + public static extern MMRESULT waveInStop(IntPtr hWaveIn); + + + // Stops input on a specified waveform output device and resets the current position to 0. + /// Handle to the waveform-audio input device. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", EntryPoint = "waveInReset", SetLastError = true)] + public static extern MMRESULT waveInReset(IntPtr hWaveIn); + + + // Stops playback on a specified waveform output device and resets the current position to 0. + /// Handle to the waveform-audio output device. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", EntryPoint = "waveOutReset", SetLastError = true)] + public static extern MMRESULT waveOutReset(IntPtr hWaveOut); + + + // Prepares a waveform data block for recording. + /// Handle to the waveform-audio input device. + /// Pointer to a WAVEHDR structure that identifies the data block to be prepared. + /// The buffer's base address must be aligned with the respect to the sample size. + /// Size, in bytes, of the WAVEHDR structure. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true)] + public static extern MMRESULT waveInPrepareHeader(IntPtr hWaveIn, WAVEHDR* pwh, int cbwh); + + + // Cleans up the preparation performed by waveInPrepareHeader. + /// Handle to the waveform-audio input device. + /// Pointer to a WAVEHDR structure identifying the data block to be cleaned up. + /// Size, in bytes, of the WAVEHDR structure. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true)] + public static extern MMRESULT waveInUnprepareHeader(IntPtr hWaveIn, WAVEHDR* pwh, int cbwh); + + + // The waveInAddBuffer function sends an input buffer to the given waveform-audio input device. When the buffer is filled, the application is notified. + /// Handle to the waveform-audio input device. + /// Pointer to a WAVEHDR structure that identifies the buffer. + /// Size, in bytes, of the WAVEHDR structure. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", EntryPoint = "waveInAddBuffer", SetLastError = true)] + public static extern MMRESULT waveInAddBuffer(IntPtr hWaveIn, WAVEHDR* pwh, int cbwh); + + + // Closes the specified waveform input device. + /// Handle to the waveform-audio input device. If the function succeeds, the handle is no longer valid after this call. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true)] + public static extern Win32.MMRESULT waveInClose(IntPtr hWaveIn); + + + // Closes the specified waveform output device. + /// Handle to the waveform-audio output device. If the function succeeds, the handle is no longer valid after this call. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)] + public static extern Win32.MMRESULT waveOutClose(IntPtr hWaveOut); + + + // Pauses playback on a specified waveform output device. + /// Handle to the waveform-audio output device. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll")] + public static extern Win32.MMRESULT waveOutPause(IntPtr hWaveOut); + + + // Restarts a paused waveform output device. + /// Handle to the waveform-audio output device. + /// Returns value of MMSYSERR. + [DllImport("winmm.dll", EntryPoint = "waveOutRestart", SetLastError = true)] + public static extern Win32.MMRESULT waveOutRestart(IntPtr hWaveOut); + + + } +} \ No newline at end of file diff --git a/AudioWaveOutClassLibrary/WinSound.cs b/AudioWaveOutClassLibrary/WinSound.cs new file mode 100644 index 0000000..1b85c59 --- /dev/null +++ b/AudioWaveOutClassLibrary/WinSound.cs @@ -0,0 +1,144 @@ +//---------------------------------------------------------------------------- +// File Name: Win32.cs +// +// Description: +// WinSound provides an audio WaveIn Devices using API Calls, Show All Playback +// Names and WaveOut Devices By Name +// +// Author(s): +// Egor Waken +// +// History: +// 05 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +using System.Runtime.InteropServices; +using System.Text; + +namespace AudioWaveOut +{ + // LockerClass + class LockerClass + { + + } + + // WinSound + public class WinSound + { + // Constructor + public WinSound() + { + + } + + // Show All Playback Names + public static List GetPlaybackNames() + { + // Result + List list = new List(); + Win32.WAVEOUTCAPS waveOutCap = new Win32.WAVEOUTCAPS(); + + // Number of devices + uint num = Win32.waveOutGetNumDevs(); + for (int i = 0; i < num; i++) + { + uint hr = Win32.waveOutGetDevCaps(i, ref waveOutCap, Marshal.SizeOf(typeof(Win32.WAVEOUTCAPS))); + if (hr == (int)Win32.HRESULT.S_OK) + { + list.Add(waveOutCap.szPname); + } + } + + return list; + } + + // View all recording devices + public static List GetRecordingNames() + { + // Result + List list = new List(); + Win32.WAVEINCAPS waveInCap = new Win32.WAVEINCAPS(); + + // Number of devices + uint num = Win32.waveInGetNumDevs(); + for (int i = 0; i < num; i++) + { + uint hr = Win32.waveInGetDevCaps(i, ref waveInCap, Marshal.SizeOf(typeof(Win32.WAVEINCAPS))); + if (hr == (int)Win32.HRESULT.S_OK) + { + list.Add(waveInCap.szPname); + } + } + + return list; + } + + // GetWaveInDeviceIdByName + public static int GetWaveInDeviceIdByName(string name) + { + // Number of devices + uint num = Win32.waveInGetNumDevs(); + + // WaveIn structure + Win32.WAVEINCAPS caps = new Win32.WAVEINCAPS(); + for (int i = 0; i < num; i++) + { + Win32.HRESULT hr = (Win32.HRESULT)Win32.waveInGetDevCaps(i, ref caps, Marshal.SizeOf(typeof(Win32.WAVEINCAPS))); + if (hr == Win32.HRESULT.S_OK) + { + if (caps.szPname == name) + { + // Found + return i; + } + } + } + + // Not found + return Win32.WAVE_MAPPER; + } + + // GetWaveOutDeviceIdByName + public static int GetWaveOutDeviceIdByName(string name) + { + // Number of devices + uint num = Win32.waveOutGetNumDevs(); + + // WaveIn structure + Win32.WAVEOUTCAPS caps = new Win32.WAVEOUTCAPS(); + for (int i = 0; i < num; i++) + { + Win32.HRESULT hr = (Win32.HRESULT)Win32.waveOutGetDevCaps(i, ref caps, Marshal.SizeOf(typeof(Win32.WAVEOUTCAPS))); + if (hr == Win32.HRESULT.S_OK) + { + if (caps.szPname == name) + { + // Found + return i; + } + } + } + + // Not found + return Win32.WAVE_MAPPER; + } + + // Flag To String + public static String FlagToString(Win32.WaveHdrFlags flag) + { + StringBuilder sb = new StringBuilder(); + + if ((flag & Win32.WaveHdrFlags.WHDR_PREPARED) > 0) sb.Append("PREPARED "); + if ((flag & Win32.WaveHdrFlags.WHDR_BEGINLOOP) > 0) sb.Append("BEGINLOOP "); + if ((flag & Win32.WaveHdrFlags.WHDR_ENDLOOP) > 0) sb.Append("ENDLOOP "); + if ((flag & Win32.WaveHdrFlags.WHDR_INQUEUE) > 0) sb.Append("INQUEUE "); + if ((flag & Win32.WaveHdrFlags.WHDR_DONE) > 0) sb.Append("DONE "); + + return sb.ToString(); + } + } +} diff --git a/AudioWaveOutClassLibrary/bin/Debug/net8.0/AudioWaveOutClassLibrary.deps.json b/AudioWaveOutClassLibrary/bin/Debug/net8.0/AudioWaveOutClassLibrary.deps.json new file mode 100644 index 0000000..deefda0 --- /dev/null +++ b/AudioWaveOutClassLibrary/bin/Debug/net8.0/AudioWaveOutClassLibrary.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "AudioWaveOutClassLibrary/1.0.0": { + "runtime": { + "AudioWaveOutClassLibrary.dll": {} + } + } + } + }, + "libraries": { + "AudioWaveOutClassLibrary/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/AudioWaveOutClassLibrary/bin/Debug/net8.0/AudioWaveOutClassLibrary.dll b/AudioWaveOutClassLibrary/bin/Debug/net8.0/AudioWaveOutClassLibrary.dll new file mode 100644 index 0000000..a6c4926 Binary files /dev/null and b/AudioWaveOutClassLibrary/bin/Debug/net8.0/AudioWaveOutClassLibrary.dll differ diff --git a/AudioWaveOutClassLibrary/bin/Debug/net8.0/AudioWaveOutClassLibrary.pdb b/AudioWaveOutClassLibrary/bin/Debug/net8.0/AudioWaveOutClassLibrary.pdb new file mode 100644 index 0000000..004291f Binary files /dev/null and b/AudioWaveOutClassLibrary/bin/Debug/net8.0/AudioWaveOutClassLibrary.pdb differ diff --git a/AudioWaveOutClassLibrary/obj/AudioWaveOutClassLibrary.csproj.nuget.dgspec.json b/AudioWaveOutClassLibrary/obj/AudioWaveOutClassLibrary.csproj.nuget.dgspec.json new file mode 100644 index 0000000..0b57a11 --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/AudioWaveOutClassLibrary.csproj.nuget.dgspec.json @@ -0,0 +1,67 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj": {} + }, + "projects": { + "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj", + "projectName": "AudioWaveOutClassLibrary", + "projectPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj", + "packagesPath": "C:\\Users\\38096\\.nuget\\packages\\", + "outputPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\38096\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/AudioWaveOutClassLibrary/obj/AudioWaveOutClassLibrary.csproj.nuget.g.props b/AudioWaveOutClassLibrary/obj/AudioWaveOutClassLibrary.csproj.nuget.g.props new file mode 100644 index 0000000..a4c1339 --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/AudioWaveOutClassLibrary.csproj.nuget.g.props @@ -0,0 +1,16 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\38096\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 6.8.0 + + + + + + \ No newline at end of file diff --git a/AudioWaveOutClassLibrary/obj/AudioWaveOutClassLibrary.csproj.nuget.g.targets b/AudioWaveOutClassLibrary/obj/AudioWaveOutClassLibrary.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/AudioWaveOutClassLibrary.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/AudioWaveOutClassLibrary/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.AssemblyInfo.cs b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.AssemblyInfo.cs new file mode 100644 index 0000000..014a40d --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("AudioWaveOutClassLibrary")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("AudioWaveOutClassLibrary")] +[assembly: System.Reflection.AssemblyTitleAttribute("AudioWaveOutClassLibrary")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.AssemblyInfoInputs.cache b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.AssemblyInfoInputs.cache new file mode 100644 index 0000000..5cd7648 --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +fbd9a9b629e2e5f2b967f52e81f02c6be85a33a28dade1d67c5a324bc0958d1c diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.GeneratedMSBuildEditorConfig.editorconfig b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..9372234 --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = AudioWaveOutClassLibrary +build_property.ProjectDir = C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.GlobalUsings.g.cs b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.assets.cache b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.assets.cache new file mode 100644 index 0000000..19af09b Binary files /dev/null and b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.assets.cache differ diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.csproj.CoreCompileInputs.cache b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..267d03c --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +6f30de9def75fa72fcb4da5d0e42bfcd9086aa52a9f02575f85e46e4233d338f diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.csproj.FileListAbsolute.txt b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..bc6d7d2 --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.csproj.FileListAbsolute.txt @@ -0,0 +1,12 @@ +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\obj\Debug\net8.0\AudioWaveOutClassLibrary.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\obj\Debug\net8.0\AudioWaveOutClassLibrary.AssemblyInfoInputs.cache +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\obj\Debug\net8.0\AudioWaveOutClassLibrary.AssemblyInfo.cs +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\obj\Debug\net8.0\AudioWaveOutClassLibrary.csproj.CoreCompileInputs.cache +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\obj\Debug\net8.0\AudioWaveOutClassLibrary.sourcelink.json +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\bin\Debug\net8.0\AudioWaveOutClassLibrary.deps.json +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\bin\Debug\net8.0\AudioWaveOutClassLibrary.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\bin\Debug\net8.0\AudioWaveOutClassLibrary.pdb +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\obj\Debug\net8.0\AudioWaveOutClassLibrary.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\obj\Debug\net8.0\refint\AudioWaveOutClassLibrary.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\obj\Debug\net8.0\AudioWaveOutClassLibrary.pdb +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutClassLibrary\obj\Debug\net8.0\ref\AudioWaveOutClassLibrary.dll diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.dll b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.dll new file mode 100644 index 0000000..a6c4926 Binary files /dev/null and b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.dll differ diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.pdb b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.pdb new file mode 100644 index 0000000..004291f Binary files /dev/null and b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.pdb differ diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.sourcelink.json b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.sourcelink.json new file mode 100644 index 0000000..5e20fcc --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/Debug/net8.0/AudioWaveOutClassLibrary.sourcelink.json @@ -0,0 +1 @@ +{"documents":{"C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\*":"https://raw.githubusercontent.com/VotreWaken/CelestialRTP/14f3d16c9fe2c14675dbc3d2c20ed04315c581a0/*"}} \ No newline at end of file diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/ref/AudioWaveOutClassLibrary.dll b/AudioWaveOutClassLibrary/obj/Debug/net8.0/ref/AudioWaveOutClassLibrary.dll new file mode 100644 index 0000000..5bb3503 Binary files /dev/null and b/AudioWaveOutClassLibrary/obj/Debug/net8.0/ref/AudioWaveOutClassLibrary.dll differ diff --git a/AudioWaveOutClassLibrary/obj/Debug/net8.0/refint/AudioWaveOutClassLibrary.dll b/AudioWaveOutClassLibrary/obj/Debug/net8.0/refint/AudioWaveOutClassLibrary.dll new file mode 100644 index 0000000..5bb3503 Binary files /dev/null and b/AudioWaveOutClassLibrary/obj/Debug/net8.0/refint/AudioWaveOutClassLibrary.dll differ diff --git a/AudioWaveOutClassLibrary/obj/project.assets.json b/AudioWaveOutClassLibrary/obj/project.assets.json new file mode 100644 index 0000000..67fc522 --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/project.assets.json @@ -0,0 +1,73 @@ +{ + "version": 3, + "targets": { + "net8.0": {} + }, + "libraries": {}, + "projectFileDependencyGroups": { + "net8.0": [] + }, + "packageFolders": { + "C:\\Users\\38096\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj", + "projectName": "AudioWaveOutClassLibrary", + "projectPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj", + "packagesPath": "C:\\Users\\38096\\.nuget\\packages\\", + "outputPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\38096\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/AudioWaveOutClassLibrary/obj/project.nuget.cache b/AudioWaveOutClassLibrary/obj/project.nuget.cache new file mode 100644 index 0000000..fc36740 --- /dev/null +++ b/AudioWaveOutClassLibrary/obj/project.nuget.cache @@ -0,0 +1,8 @@ +{ + "version": 2, + "dgSpecHash": "8avNWUuX7O/ALS9cYH/SPHwnFi0EpheDEkZLtzZ4xO4+5lFQoByAFGLPUYvxyyz5xFif1dLEYSogL4N/wY9kOg==", + "success": true, + "projectFilePath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj", + "expectedPackageFiles": [], + "logs": [] +} \ No newline at end of file diff --git a/AudioWaveOutUnitTest/AudioWaveOutUnitTest.csproj b/AudioWaveOutUnitTest/AudioWaveOutUnitTest.csproj new file mode 100644 index 0000000..19c7788 --- /dev/null +++ b/AudioWaveOutUnitTest/AudioWaveOutUnitTest.csproj @@ -0,0 +1,32 @@ + + + + net8.0 + enable + enable + + false + true + + + + + + + + + + + + + + + + + + + Always + + + + diff --git a/AudioWaveOutUnitTest/BaseSetup.cs b/AudioWaveOutUnitTest/BaseSetup.cs new file mode 100644 index 0000000..2547af4 --- /dev/null +++ b/AudioWaveOutUnitTest/BaseSetup.cs @@ -0,0 +1,38 @@ +//---------------------------------------------------------------------------- +// File Name: BaseSetup.cs +// +// Description: +// BaseSetup is responsible for All Unit Tests Setup, Defines the behavior +// of the logger, and finalization after all tests done +// +// +// Author(s): +// Egor Waken +// +// History: +// 07 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- + +namespace AudioWaveOutUnitTest +{ + [SetUpFixture] + public class BaseSetup + { + [OneTimeSetUp] + public void SetUp() + { + // Make Build + // In NLog.config File need to set Copy To Output Directory + LogManager.Configuration = new XmlLoggingConfiguration("nlog.config"); + } + + [OneTimeTearDown] + public void TearDown() + { + // Finalize + } + } +} diff --git a/AudioWaveOutUnitTest/GlobalUsings.cs b/AudioWaveOutUnitTest/GlobalUsings.cs new file mode 100644 index 0000000..f9977a9 --- /dev/null +++ b/AudioWaveOutUnitTest/GlobalUsings.cs @@ -0,0 +1,5 @@ +global using NUnit.Framework; +global using AudioWaveOut; +global using NLog; +global using NLog.Config; +global using Moq; \ No newline at end of file diff --git a/AudioWaveOutUnitTest/WinSoundTests.cs b/AudioWaveOutUnitTest/WinSoundTests.cs new file mode 100644 index 0000000..b98b8d2 --- /dev/null +++ b/AudioWaveOutUnitTest/WinSoundTests.cs @@ -0,0 +1,113 @@ +//---------------------------------------------------------------------------- +// File Name: WinSoundTests.cs +// +// Description: +// WinSoundTests is responsible for UnitTesting WinSound.cs Class +// +// +// Author(s): +// Egor Waken +// +// History: +// 07 May 2024 Egor Waken Created. +// +// License: +// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file. +//---------------------------------------------------------------------------- +namespace AudioWaveOutUnitTest +{ + [TestFixture] + public class WinSoundTests : BaseSetup + { + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + + + [Test] + public void GetPlaybackNamesNotEmpty() + { + // Arrange: Prepare the test by obtaining playback device names + List playbackNames = WinSound.GetPlaybackNames(); + + // Act: Perform the action (calling the method under test) + // Assert: Verify the expected behavior + Assert.IsNotNull(playbackNames, "Playback names list should not be null"); + Assert.IsNotEmpty(playbackNames, "Playback names list should not be empty"); + + Logger.Info($"Pass GetPlaybackNames_NotEmpty Test"); + } + + [Test] + public void GetRecordingNamesNotEmpty() + { + // Arrange: Prepare the test by obtaining recording device names + List recordingNames = WinSound.GetRecordingNames(); + + // Act: Perform the action (calling the method under test) + // Assert: Verify the expected behavior + Assert.IsNotNull(recordingNames, "Recording names list should not be null"); + Assert.IsNotEmpty(recordingNames, "Recording names list should not be empty"); + + Logger.Info($"Pass GetRecordingNames_NotEmpty Test"); + } + + /* + [Test] + public void GetWaveInDeviceIdByNameExistingNameReturnsValidId() + { + // Arrange: Prepare the test by specifying an existing device name + string existingDeviceName = "Device A"; + + // Emulate a list of available playback devices + List playbackNames = new List { "Device A", "Device B" }; + + + // Create a mock for WinSound + var mockWinSound = new Mock(); + + // Configure the mock for the static method GetPlaybackNames() + mockWinSound.Setup(w => WinSound.GetPlaybackNames()).Returns(playbackNames); + + // Act: Perform the action (calling the method under test) + int deviceId = WinSound.GetWaveInDeviceIdByName(existingDeviceName); + + // Assert: Verify the expected behavior + Assert.AreNotEqual(-1, deviceId, $"Device ID for '{existingDeviceName}' should not be -1"); + + // Log test pass + Logger.Info($"Pass GetWaveInDeviceIdByName_ExistingDeviceName_ReturnsValidId Test"); + } + */ + + [Test] + public void GetWaveInDeviceIdByNameNonExistingNameReturnsWaveMapper() + { + // Arrange: Prepare the test by specifying a non-existing device name + string nonExistingDeviceName = "NonExistingDevice"; + + // Act: Perform the action (calling the method under test) + int deviceId = WinSound.GetWaveInDeviceIdByName(nonExistingDeviceName); + + // Assert: Verify the expected behavior + Assert.AreEqual(Win32.WAVE_MAPPER, deviceId, $"Device ID for '{nonExistingDeviceName}' should be WAVE_MAPPER"); + + Logger.Info($"Pass GetWaveInDeviceIdByName_NonExistingName_ReturnsWaveMapper Test"); + } + + [Test] + public void FlagToStringReturnsExpectedString() + { + // Arrange: Prepare the test by defining the flags + var flags = Win32.WaveHdrFlags.WHDR_PREPARED | Win32.WaveHdrFlags.WHDR_DONE; + + // Act: Perform the action (calling the method under test) + string result = WinSound.FlagToString(flags); + + // Assert: Verify the expected behavior + Assert.AreEqual("PREPARED DONE ", result, "FlagToString result should match the expected string"); + + Logger.Info($"Pass FlagToString_CorrectFlags_ReturnsExpectedString Test"); + } + + + } +} \ No newline at end of file diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutClassLibrary.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutClassLibrary.dll new file mode 100644 index 0000000..a6c4926 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutClassLibrary.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutClassLibrary.pdb b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutClassLibrary.pdb new file mode 100644 index 0000000..004291f Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutClassLibrary.pdb differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.deps.json b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.deps.json new file mode 100644 index 0000000..decd4e1 --- /dev/null +++ b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.deps.json @@ -0,0 +1,512 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "AudioWaveOutUnitTest/1.0.0": { + "dependencies": { + "AudioWaveOutClassLibrary": "1.0.0", + "Microsoft.NET.Test.Sdk": "17.6.0", + "Moq": "4.20.70", + "NLog": "5.3.2", + "NUnit": "3.13.3", + "NUnit.Analyzers": "3.6.1", + "NUnit3TestAdapter": "4.2.1", + "coverlet.collector": "6.0.0" + }, + "runtime": { + "AudioWaveOutUnitTest.dll": {} + } + }, + "Castle.Core/5.1.1": { + "dependencies": { + "System.Diagnostics.EventLog": "6.0.0" + }, + "runtime": { + "lib/net6.0/Castle.Core.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.1.1.0" + } + } + }, + "coverlet.collector/6.0.0": {}, + "Microsoft.CodeCoverage/17.6.0": { + "runtime": { + "lib/netcoreapp3.1/Microsoft.VisualStudio.CodeCoverage.Shim.dll": { + "assemblyVersion": "15.0.0.0", + "fileVersion": "17.600.1123.17103" + } + } + }, + "Microsoft.NET.Test.Sdk/17.6.0": { + "dependencies": { + "Microsoft.CodeCoverage": "17.6.0", + "Microsoft.TestPlatform.TestHost": "17.6.0" + } + }, + "Microsoft.NETCore.Platforms/1.1.0": {}, + "Microsoft.TestPlatform.ObjectModel/17.6.0": { + "dependencies": { + "NuGet.Frameworks": "5.11.0", + "System.Reflection.Metadata": "1.6.0" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.TestPlatform.CoreUtilities.dll": { + "assemblyVersion": "15.0.0.0", + "fileVersion": "15.0.0.0" + }, + "lib/netcoreapp3.1/Microsoft.TestPlatform.PlatformAbstractions.dll": { + "assemblyVersion": "15.0.0.0", + "fileVersion": "15.0.0.0" + }, + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": { + "assemblyVersion": "15.0.0.0", + "fileVersion": "15.0.0.0" + } + }, + "resources": { + "lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/de/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/es/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/it/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.TestPlatform.TestHost/17.6.0": { + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.6.0", + "Newtonsoft.Json": "13.0.1" + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.TestPlatform.CommunicationUtilities.dll": { + "assemblyVersion": "15.0.0.0", + "fileVersion": "15.0.0.0" + }, + "lib/netcoreapp3.1/Microsoft.TestPlatform.CrossPlatEngine.dll": { + "assemblyVersion": "15.0.0.0", + "fileVersion": "15.0.0.0" + }, + "lib/netcoreapp3.1/Microsoft.TestPlatform.Utilities.dll": { + "assemblyVersion": "15.0.0.0", + "fileVersion": "15.0.0.0" + }, + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.Common.dll": { + "assemblyVersion": "15.0.0.0", + "fileVersion": "15.0.0.0" + }, + "lib/netcoreapp3.1/testhost.dll": { + "assemblyVersion": "15.0.0.0", + "fileVersion": "15.0.0.0" + } + }, + "resources": { + "lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Moq/4.20.70": { + "dependencies": { + "Castle.Core": "5.1.1" + }, + "runtime": { + "lib/net6.0/Moq.dll": { + "assemblyVersion": "4.20.70.0", + "fileVersion": "4.20.70.0" + } + } + }, + "NETStandard.Library/2.0.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + }, + "Newtonsoft.Json/13.0.1": { + "runtime": { + "lib/netstandard2.0/Newtonsoft.Json.dll": { + "assemblyVersion": "13.0.0.0", + "fileVersion": "13.0.1.25517" + } + } + }, + "NLog/5.3.2": { + "runtime": { + "lib/netstandard2.0/NLog.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.3.2.2526" + } + } + }, + "NuGet.Frameworks/5.11.0": { + "runtime": { + "lib/netstandard2.0/NuGet.Frameworks.dll": { + "assemblyVersion": "5.11.0.10", + "fileVersion": "5.11.0.10" + } + } + }, + "NUnit/3.13.3": { + "dependencies": { + "NETStandard.Library": "2.0.0" + }, + "runtime": { + "lib/netstandard2.0/nunit.framework.dll": { + "assemblyVersion": "3.13.3.0", + "fileVersion": "3.13.3.0" + } + } + }, + "NUnit.Analyzers/3.6.1": {}, + "NUnit3TestAdapter/4.2.1": {}, + "System.Diagnostics.EventLog/6.0.0": { + "runtime": { + "lib/net6.0/System.Diagnostics.EventLog.dll": { + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + }, + "runtimeTargets": { + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.Messages.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "6.0.0.0", + "fileVersion": "0.0.0.0" + }, + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "6.0.0.0", + "fileVersion": "6.0.21.52210" + } + } + }, + "System.Reflection.Metadata/1.6.0": {}, + "AudioWaveOutClassLibrary/1.0.0": { + "runtime": { + "AudioWaveOutClassLibrary.dll": {} + } + } + } + }, + "libraries": { + "AudioWaveOutUnitTest/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Castle.Core/5.1.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", + "path": "castle.core/5.1.1", + "hashPath": "castle.core.5.1.1.nupkg.sha512" + }, + "coverlet.collector/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tW3lsNS+dAEII6YGUX/VMoJjBS1QvsxqJeqLaJXub08y1FSjasFPtQ4UBUsudE9PNrzLjooClMsPtY2cZLdXpQ==", + "path": "coverlet.collector/6.0.0", + "hashPath": "coverlet.collector.6.0.0.nupkg.sha512" + }, + "Microsoft.CodeCoverage/17.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5v2GwzpR7JEuQUzupjx3zLwn2FutADW/weLzLt726DR3WXxsM+ICPoJG6pxuKFsumtZp890UrVuudTUhsE8Qyg==", + "path": "microsoft.codecoverage/17.6.0", + "hashPath": "microsoft.codecoverage.17.6.0.nupkg.sha512" + }, + "Microsoft.NET.Test.Sdk/17.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-tHyg4C6c89QvLv6Utz3xKlba4EeoyJyIz59Q1NrjRENV7gfGnSE6I+sYPIbVOzQttoo2zpHDgOK/p6Hw2OlD7A==", + "path": "microsoft.net.test.sdk/17.6.0", + "hashPath": "microsoft.net.test.sdk.17.6.0.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "path": "microsoft.netcore.platforms/1.1.0", + "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" + }, + "Microsoft.TestPlatform.ObjectModel/17.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-AA/rrf5zwC5/OBLEOajkhjbVTM3SvxRXy8kcQ8e4mJKojbyZvqqhpfNg362N9vXU94DLg9NUTFOAnoYVT0pTJw==", + "path": "microsoft.testplatform.objectmodel/17.6.0", + "hashPath": "microsoft.testplatform.objectmodel.17.6.0.nupkg.sha512" + }, + "Microsoft.TestPlatform.TestHost/17.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7YdgUcIeCPVKLC7n7LNKDiEHWc7z3brkkYPdUbDnFsvf6WvY9UfzS0VSUJ8P2NgN0CDSD223GCJFSjSBLZRqOQ==", + "path": "microsoft.testplatform.testhost/17.6.0", + "hashPath": "microsoft.testplatform.testhost.17.6.0.nupkg.sha512" + }, + "Moq/4.20.70": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4rNnAwdpXJBuxqrOCzCyICXHSImOTRktCgCWXWykuF1qwoIsVvEnR7PjbMk/eLOxWvhmj5Kwt+kDV3RGUYcNwg==", + "path": "moq/4.20.70", + "hashPath": "moq.4.20.70.nupkg.sha512" + }, + "NETStandard.Library/2.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYmBPA==", + "path": "netstandard.library/2.0.0", + "hashPath": "netstandard.library.2.0.0.nupkg.sha512" + }, + "Newtonsoft.Json/13.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==", + "path": "newtonsoft.json/13.0.1", + "hashPath": "newtonsoft.json.13.0.1.nupkg.sha512" + }, + "NLog/5.3.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-cQRQZuDMjSyMe9EQBnI9v55YAMMz8GAfFd6fFJ6tc/kXnG7Hze8p1I8MgvWSBG6E36wA8vSxRrlm8uSIG+SENg==", + "path": "nlog/5.3.2", + "hashPath": "nlog.5.3.2.nupkg.sha512" + }, + "NuGet.Frameworks/5.11.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q==", + "path": "nuget.frameworks/5.11.0", + "hashPath": "nuget.frameworks.5.11.0.nupkg.sha512" + }, + "NUnit/3.13.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KNPDpls6EfHwC3+nnA67fh5wpxeLb3VLFAfLxrug6JMYDLHH6InaQIWR7Sc3y75d/9IKzMksH/gi08W7XWbmnQ==", + "path": "nunit/3.13.3", + "hashPath": "nunit.3.13.3.nupkg.sha512" + }, + "NUnit.Analyzers/3.6.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RKP9tpKfl3DmRgUDGgh3XM3XzeLMrCXXMZm6vm1nMsObZ6vtQL1L9NrK7+oZh1jWearvNsbMis2+AIOY3NFmow==", + "path": "nunit.analyzers/3.6.1", + "hashPath": "nunit.analyzers.3.6.1.nupkg.sha512" + }, + "NUnit3TestAdapter/4.2.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kgH8VKsrcZZgNGQXRpVCrM7TnNz9li3b/snH+YmnXUNqsaWa1Xw9EQWHpbzq4Li2FbTjTE/E5N5HdLNXzZ8BpQ==", + "path": "nunit3testadapter/4.2.1", + "hashPath": "nunit3testadapter.4.2.1.nupkg.sha512" + }, + "System.Diagnostics.EventLog/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==", + "path": "system.diagnostics.eventlog/6.0.0", + "hashPath": "system.diagnostics.eventlog.6.0.0.nupkg.sha512" + }, + "System.Reflection.Metadata/1.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==", + "path": "system.reflection.metadata/1.6.0", + "hashPath": "system.reflection.metadata.1.6.0.nupkg.sha512" + }, + "AudioWaveOutClassLibrary/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.dll new file mode 100644 index 0000000..e9d9839 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.pdb b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.pdb new file mode 100644 index 0000000..6c2fc2b Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.pdb differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.runtimeconfig.json b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.runtimeconfig.json new file mode 100644 index 0000000..becfaea --- /dev/null +++ b/AudioWaveOutUnitTest/bin/Debug/net8.0/AudioWaveOutUnitTest.runtimeconfig.json @@ -0,0 +1,12 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Castle.Core.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Castle.Core.dll new file mode 100644 index 0000000..eb7fd3b Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Castle.Core.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/CoverletSourceRootsMapping_AudioWaveOutUnitTest b/AudioWaveOutUnitTest/bin/Debug/net8.0/CoverletSourceRootsMapping_AudioWaveOutUnitTest new file mode 100644 index 0000000..9dddf0c Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/CoverletSourceRootsMapping_AudioWaveOutUnitTest differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.CommunicationUtilities.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.CommunicationUtilities.dll new file mode 100644 index 0000000..e45af4e Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.CommunicationUtilities.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.CoreUtilities.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.CoreUtilities.dll new file mode 100644 index 0000000..c868e1f Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.CoreUtilities.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.CrossPlatEngine.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.CrossPlatEngine.dll new file mode 100644 index 0000000..8201a76 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.CrossPlatEngine.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.PlatformAbstractions.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.PlatformAbstractions.dll new file mode 100644 index 0000000..36c3817 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.PlatformAbstractions.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.Utilities.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.Utilities.dll new file mode 100644 index 0000000..75e8966 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.TestPlatform.Utilities.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll new file mode 100644 index 0000000..224bb02 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.VisualStudio.TestPlatform.Common.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.VisualStudio.TestPlatform.Common.dll new file mode 100644 index 0000000..357b697 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.VisualStudio.TestPlatform.Common.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll new file mode 100644 index 0000000..4e17acc Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Moq.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Moq.dll new file mode 100644 index 0000000..3c9679c Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Moq.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/NLog.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/NLog.dll new file mode 100644 index 0000000..3946f45 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/NLog.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/NUnit3.TestAdapter.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/NUnit3.TestAdapter.dll new file mode 100644 index 0000000..9c5017b Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/NUnit3.TestAdapter.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/NUnit3.TestAdapter.pdb b/AudioWaveOutUnitTest/bin/Debug/net8.0/NUnit3.TestAdapter.pdb new file mode 100644 index 0000000..33ab467 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/NUnit3.TestAdapter.pdb differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/Newtonsoft.Json.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/Newtonsoft.Json.dll new file mode 100644 index 0000000..1ffeabe Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/Newtonsoft.Json.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/NuGet.Frameworks.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/NuGet.Frameworks.dll new file mode 100644 index 0000000..0fabf0c Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/NuGet.Frameworks.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/System.Diagnostics.EventLog.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/System.Diagnostics.EventLog.dll new file mode 100644 index 0000000..8a65e71 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/System.Diagnostics.EventLog.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..cb28e97 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..b9f081d Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..74ebedb Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..98cbcb7 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..7333544 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..7bfd5b1 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..6a248d6 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..a1861dd Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..505dddd Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..4645b6b Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..1668698 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..6bd079a Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..6430c84 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..e683698 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..1442ee8 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..c7759cf Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..c207945 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..0bc035b Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..8d900d5 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..6f0b7cd Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..266057d Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..0d3887a Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..80d55d5 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..f7a9f3d Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..6abdb0f Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..3a39a78 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..ea6315e Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..470173a Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..0d53bff Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..b09e823 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..0114575 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..a0d681f Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..6ad80ed Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..44520a2 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..9aceed9 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/nlog.config b/AudioWaveOutUnitTest/bin/Debug/net8.0/nlog.config new file mode 100644 index 0000000..78b60b9 --- /dev/null +++ b/AudioWaveOutUnitTest/bin/Debug/net8.0/nlog.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.engine.api.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.engine.api.dll new file mode 100644 index 0000000..c5a7503 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.engine.api.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.engine.core.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.engine.core.dll new file mode 100644 index 0000000..0e4c7a1 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.engine.core.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.engine.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.engine.dll new file mode 100644 index 0000000..d943469 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.engine.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.framework.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.framework.dll new file mode 100644 index 0000000..16e3f3b Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit.framework.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit_random_seed.tmp b/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit_random_seed.tmp new file mode 100644 index 0000000..a8bc1cd --- /dev/null +++ b/AudioWaveOutUnitTest/bin/Debug/net8.0/nunit_random_seed.tmp @@ -0,0 +1 @@ +1155998811 \ No newline at end of file diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..7dc061e Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..ddce776 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..5d9cc06 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..9129485 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..93dfb6d Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..6f009dc Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..a52d361 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..08d86f9 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..9e7e899 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..4841034 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..d4f74e0 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..f6b8ea3 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..c926fc1 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..9aa81a0 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..193cfe8 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/runtimes/win/lib/net6.0/System.Diagnostics.EventLog.Messages.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/runtimes/win/lib/net6.0/System.Diagnostics.EventLog.Messages.dll new file mode 100644 index 0000000..bc23526 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/runtimes/win/lib/net6.0/System.Diagnostics.EventLog.Messages.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/runtimes/win/lib/net6.0/System.Diagnostics.EventLog.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/runtimes/win/lib/net6.0/System.Diagnostics.EventLog.dll new file mode 100644 index 0000000..03b44f1 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/runtimes/win/lib/net6.0/System.Diagnostics.EventLog.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/testcentric.engine.metadata.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/testcentric.engine.metadata.dll new file mode 100644 index 0000000..b982b6b Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/testcentric.engine.metadata.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/testhost.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/testhost.dll new file mode 100644 index 0000000..b15bd81 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/testhost.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/testhost.exe b/AudioWaveOutUnitTest/bin/Debug/net8.0/testhost.exe new file mode 100644 index 0000000..de9292b Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/testhost.exe differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..0103c73 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..1af1a2b Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..8208c4a Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..1e34b72 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..764f76d Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..cfbbe73 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..d8b7fb2 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..1911bc8 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..7de1876 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..c7908a2 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll new file mode 100644 index 0000000..edb16db Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll new file mode 100644 index 0000000..432e72c Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll new file mode 100644 index 0000000..82406ca Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll new file mode 100644 index 0000000..8545af8 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll differ diff --git a/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll new file mode 100644 index 0000000..b2092e0 Binary files /dev/null and b/AudioWaveOutUnitTest/bin/Debug/net8.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll differ diff --git a/AudioWaveOutUnitTest/log.txt b/AudioWaveOutUnitTest/log.txt new file mode 100644 index 0000000..03a4f71 --- /dev/null +++ b/AudioWaveOutUnitTest/log.txt @@ -0,0 +1,4 @@ +2024-05-07 23:26:42.3020 Trace: MethodBaseInvoker.InvokeWithNoArgs => RuntimeMethodHandle.InvokeMethod => WinSoundTests.FlagToStringReturnsExpectedString Pass FlagToString_CorrectFlags_ReturnsExpectedString Test +2024-05-07 23:26:42.3398 Trace: MethodBaseInvoker.InvokeWithNoArgs => RuntimeMethodHandle.InvokeMethod => WinSoundTests.GetPlaybackNamesNotEmpty Pass GetPlaybackNames_NotEmpty Test +2024-05-07 23:26:42.3398 Trace: MethodBaseInvoker.InvokeWithNoArgs => RuntimeMethodHandle.InvokeMethod => WinSoundTests.GetRecordingNamesNotEmpty Pass GetRecordingNames_NotEmpty Test +2024-05-07 23:26:42.3398 Trace: MethodBaseInvoker.InvokeWithNoArgs => RuntimeMethodHandle.InvokeMethod => WinSoundTests.GetWaveInDeviceIdByNameNonExistingNameReturnsWaveMapper Pass GetWaveInDeviceIdByName_NonExistingName_ReturnsWaveMapper Test diff --git a/AudioWaveOutUnitTest/nlog.config b/AudioWaveOutUnitTest/nlog.config new file mode 100644 index 0000000..78b60b9 --- /dev/null +++ b/AudioWaveOutUnitTest/nlog.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/AudioWaveOutUnitTest/obj/AudioWaveOutUnitTest.csproj.nuget.dgspec.json b/AudioWaveOutUnitTest/obj/AudioWaveOutUnitTest.csproj.nuget.dgspec.json new file mode 100644 index 0000000..960ff5f --- /dev/null +++ b/AudioWaveOutUnitTest/obj/AudioWaveOutUnitTest.csproj.nuget.dgspec.json @@ -0,0 +1,160 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutUnitTest\\AudioWaveOutUnitTest.csproj": {} + }, + "projects": { + "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj", + "projectName": "AudioWaveOutClassLibrary", + "projectPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj", + "packagesPath": "C:\\Users\\38096\\.nuget\\packages\\", + "outputPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\38096\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + } + }, + "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutUnitTest\\AudioWaveOutUnitTest.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutUnitTest\\AudioWaveOutUnitTest.csproj", + "projectName": "AudioWaveOutUnitTest", + "projectPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutUnitTest\\AudioWaveOutUnitTest.csproj", + "packagesPath": "C:\\Users\\38096\\.nuget\\packages\\", + "outputPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutUnitTest\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\38096\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": { + "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj": { + "projectPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "Microsoft.NET.Test.Sdk": { + "target": "Package", + "version": "[17.6.0, )" + }, + "Moq": { + "target": "Package", + "version": "[4.20.70, )" + }, + "NLog": { + "target": "Package", + "version": "[5.3.2, )" + }, + "NUnit": { + "target": "Package", + "version": "[3.13.3, )" + }, + "NUnit.Analyzers": { + "target": "Package", + "version": "[3.6.1, )" + }, + "NUnit3TestAdapter": { + "target": "Package", + "version": "[4.2.1, )" + }, + "coverlet.collector": { + "target": "Package", + "version": "[6.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/AudioWaveOutUnitTest/obj/AudioWaveOutUnitTest.csproj.nuget.g.props b/AudioWaveOutUnitTest/obj/AudioWaveOutUnitTest.csproj.nuget.g.props new file mode 100644 index 0000000..9a0d165 --- /dev/null +++ b/AudioWaveOutUnitTest/obj/AudioWaveOutUnitTest.csproj.nuget.g.props @@ -0,0 +1,26 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\38096\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 6.8.0 + + + + + + + + + + + + + + C:\Users\38096\.nuget\packages\nunit.analyzers\3.6.1 + + \ No newline at end of file diff --git a/AudioWaveOutUnitTest/obj/AudioWaveOutUnitTest.csproj.nuget.g.targets b/AudioWaveOutUnitTest/obj/AudioWaveOutUnitTest.csproj.nuget.g.targets new file mode 100644 index 0000000..3f88d4a --- /dev/null +++ b/AudioWaveOutUnitTest/obj/AudioWaveOutUnitTest.csproj.nuget.g.targets @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/AudioWaveOutUnitTest/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/AudioWaveOutUnitTest/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.AssemblyInfo.cs b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.AssemblyInfo.cs new file mode 100644 index 0000000..c87262a --- /dev/null +++ b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("AudioWaveOutUnitTest")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("AudioWaveOutUnitTest")] +[assembly: System.Reflection.AssemblyTitleAttribute("AudioWaveOutUnitTest")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.AssemblyInfoInputs.cache b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.AssemblyInfoInputs.cache new file mode 100644 index 0000000..2a964a0 --- /dev/null +++ b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f2bc05fd2ada56d3ad418f46fed4fc9a24876b84b4dde23d5e45c4453524a630 diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.GeneratedMSBuildEditorConfig.editorconfig b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..2335d49 --- /dev/null +++ b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = AudioWaveOutUnitTest +build_property.ProjectDir = C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.GlobalUsings.g.cs b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.assets.cache b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.assets.cache new file mode 100644 index 0000000..d0cb1e6 Binary files /dev/null and b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.assets.cache differ diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.AssemblyReference.cache b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.AssemblyReference.cache new file mode 100644 index 0000000..5697f8e Binary files /dev/null and b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.AssemblyReference.cache differ diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.BuildWithSkipAnalyzers b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.BuildWithSkipAnalyzers new file mode 100644 index 0000000..e69de29 diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.CopyComplete b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.CoreCompileInputs.cache b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..23c192d --- /dev/null +++ b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +b45ddb74a9fb1e5d1e6b2fd5445e7efd964744a55725675d6a8c2efa01eb70ec diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.FileListAbsolute.txt b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..fd837b2 --- /dev/null +++ b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.csproj.FileListAbsolute.txt @@ -0,0 +1,110 @@ +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\CoverletSourceRootsMapping_AudioWaveOutUnitTest +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\testhost.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\testhost.exe +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\NUnit3.TestAdapter.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\NUnit3.TestAdapter.pdb +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\nunit.engine.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\nunit.engine.api.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\nunit.engine.core.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\testcentric.engine.metadata.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\AudioWaveOutUnitTest.deps.json +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\AudioWaveOutUnitTest.runtimeconfig.json +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\AudioWaveOutUnitTest.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\AudioWaveOutUnitTest.pdb +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Microsoft.VisualStudio.CodeCoverage.Shim.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Microsoft.TestPlatform.CoreUtilities.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Microsoft.TestPlatform.PlatformAbstractions.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Microsoft.TestPlatform.CommunicationUtilities.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Microsoft.TestPlatform.CrossPlatEngine.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Microsoft.TestPlatform.Utilities.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Microsoft.VisualStudio.TestPlatform.Common.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Newtonsoft.Json.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\NuGet.Frameworks.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\nunit.framework.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\cs\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\cs\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\de\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\de\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\es\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\es\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\fr\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\fr\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\it\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\it\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ja\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ja\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ko\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ko\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\pl\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\pl\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\pt-BR\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\pt-BR\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ru\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ru\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\tr\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\tr\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\zh-Hans\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\zh-Hans\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\zh-Hant\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\zh-Hant\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\cs\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\cs\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\cs\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\de\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\de\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\de\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\es\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\es\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\es\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\fr\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\fr\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\fr\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\it\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\it\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\it\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ja\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ja\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ja\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ko\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ko\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ko\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\pl\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\pl\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\pl\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\pt-BR\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\pt-BR\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\pt-BR\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ru\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ru\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\ru\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\tr\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\tr\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\tr\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\zh-Hans\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\zh-Hans\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\zh-Hans\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\zh-Hant\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\zh-Hant\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\zh-Hant\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\AudioWaveOutClassLibrary.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\AudioWaveOutClassLibrary.pdb +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\AudioWaveOutUnitTest.csproj.AssemblyReference.cache +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\AudioWaveOutUnitTest.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\AudioWaveOutUnitTest.AssemblyInfoInputs.cache +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\AudioWaveOutUnitTest.AssemblyInfo.cs +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\AudioWaveOutUnitTest.csproj.CoreCompileInputs.cache +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\AudioWaveOutUnitTest.sourcelink.json +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\AudioWaveOutUnitTest.csproj.CopyComplete +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\AudioWaveOutUnitTest.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\refint\AudioWaveOutUnitTest.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\AudioWaveOutUnitTest.pdb +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\AudioWaveOutUnitTest.genruntimeconfig.cache +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\obj\Debug\net8.0\ref\AudioWaveOutUnitTest.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\NLog.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\nlog.config +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Castle.Core.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\Moq.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\System.Diagnostics.EventLog.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\runtimes\win\lib\net6.0\System.Diagnostics.EventLog.Messages.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\AudioWaveOutUnitTest\bin\Debug\net8.0\runtimes\win\lib\net6.0\System.Diagnostics.EventLog.dll diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.dll b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.dll new file mode 100644 index 0000000..e9d9839 Binary files /dev/null and b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.dll differ diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.genruntimeconfig.cache b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.genruntimeconfig.cache new file mode 100644 index 0000000..e6b5cd5 --- /dev/null +++ b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.genruntimeconfig.cache @@ -0,0 +1 @@ +437ac9cae6132039ea581f6d5c1e93b93c3c6907deaf992dd6755d663b36f510 diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.pdb b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.pdb new file mode 100644 index 0000000..6c2fc2b Binary files /dev/null and b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.pdb differ diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.sourcelink.json b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.sourcelink.json new file mode 100644 index 0000000..5e20fcc --- /dev/null +++ b/AudioWaveOutUnitTest/obj/Debug/net8.0/AudioWaveOutUnitTest.sourcelink.json @@ -0,0 +1 @@ +{"documents":{"C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\*":"https://raw.githubusercontent.com/VotreWaken/CelestialRTP/14f3d16c9fe2c14675dbc3d2c20ed04315c581a0/*"}} \ No newline at end of file diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/ref/AudioWaveOutUnitTest.dll b/AudioWaveOutUnitTest/obj/Debug/net8.0/ref/AudioWaveOutUnitTest.dll new file mode 100644 index 0000000..632a6ac Binary files /dev/null and b/AudioWaveOutUnitTest/obj/Debug/net8.0/ref/AudioWaveOutUnitTest.dll differ diff --git a/AudioWaveOutUnitTest/obj/Debug/net8.0/refint/AudioWaveOutUnitTest.dll b/AudioWaveOutUnitTest/obj/Debug/net8.0/refint/AudioWaveOutUnitTest.dll new file mode 100644 index 0000000..632a6ac Binary files /dev/null and b/AudioWaveOutUnitTest/obj/Debug/net8.0/refint/AudioWaveOutUnitTest.dll differ diff --git a/AudioWaveOutUnitTest/obj/project.assets.json b/AudioWaveOutUnitTest/obj/project.assets.json new file mode 100644 index 0000000..de0bc0f --- /dev/null +++ b/AudioWaveOutUnitTest/obj/project.assets.json @@ -0,0 +1,1274 @@ +{ + "version": 3, + "targets": { + "net8.0": { + "Castle.Core/5.1.1": { + "type": "package", + "dependencies": { + "System.Diagnostics.EventLog": "6.0.0" + }, + "compile": { + "lib/net6.0/Castle.Core.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Castle.Core.dll": { + "related": ".xml" + } + } + }, + "coverlet.collector/6.0.0": { + "type": "package", + "build": { + "build/netstandard1.0/coverlet.collector.targets": {} + } + }, + "Microsoft.CodeCoverage/17.6.0": { + "type": "package", + "compile": { + "lib/netcoreapp3.1/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {} + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {} + }, + "build": { + "build/netstandard2.0/Microsoft.CodeCoverage.props": {}, + "build/netstandard2.0/Microsoft.CodeCoverage.targets": {} + } + }, + "Microsoft.NET.Test.Sdk/17.6.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeCoverage": "17.6.0", + "Microsoft.TestPlatform.TestHost": "17.6.0" + }, + "compile": { + "lib/netcoreapp3.1/_._": {} + }, + "runtime": { + "lib/netcoreapp3.1/_._": {} + }, + "build": { + "build/netcoreapp3.1/Microsoft.NET.Test.Sdk.props": {}, + "build/netcoreapp3.1/Microsoft.NET.Test.Sdk.targets": {} + }, + "buildMultiTargeting": { + "buildMultiTargeting/Microsoft.NET.Test.Sdk.props": {} + } + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.TestPlatform.ObjectModel/17.6.0": { + "type": "package", + "dependencies": { + "NuGet.Frameworks": "5.11.0", + "System.Reflection.Metadata": "1.6.0" + }, + "compile": { + "lib/netcoreapp3.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp3.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {} + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp3.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {} + }, + "resource": { + "lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/de/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/es/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/it/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.TestPlatform.TestHost/17.6.0": { + "type": "package", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.6.0", + "Newtonsoft.Json": "13.0.1" + }, + "compile": { + "lib/netcoreapp3.1/Microsoft.TestPlatform.CommunicationUtilities.dll": {}, + "lib/netcoreapp3.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp3.1/Microsoft.TestPlatform.CrossPlatEngine.dll": {}, + "lib/netcoreapp3.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp3.1/Microsoft.TestPlatform.Utilities.dll": {}, + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.Common.dll": {}, + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {}, + "lib/netcoreapp3.1/testhost.dll": { + "related": ".deps.json" + } + }, + "runtime": { + "lib/netcoreapp3.1/Microsoft.TestPlatform.CommunicationUtilities.dll": {}, + "lib/netcoreapp3.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp3.1/Microsoft.TestPlatform.CrossPlatEngine.dll": {}, + "lib/netcoreapp3.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp3.1/Microsoft.TestPlatform.Utilities.dll": {}, + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.Common.dll": {}, + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {}, + "lib/netcoreapp3.1/testhost.dll": { + "related": ".deps.json" + } + }, + "resource": { + "lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp3.1/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp3.1/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp3.1/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp3.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "zh-Hant" + } + }, + "build": { + "build/netcoreapp3.1/Microsoft.TestPlatform.TestHost.props": {} + } + }, + "Moq/4.20.70": { + "type": "package", + "dependencies": { + "Castle.Core": "5.1.1" + }, + "compile": { + "lib/net6.0/Moq.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/Moq.dll": { + "related": ".xml" + } + } + }, + "NETStandard.Library/2.0.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + }, + "build": { + "build/netstandard2.0/NETStandard.Library.targets": {} + } + }, + "Newtonsoft.Json/13.0.1": { + "type": "package", + "compile": { + "lib/netstandard2.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "NLog/5.3.2": { + "type": "package", + "compile": { + "lib/netstandard2.0/NLog.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/NLog.dll": { + "related": ".xml" + } + } + }, + "NuGet.Frameworks/5.11.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/NuGet.Frameworks.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/NuGet.Frameworks.dll": { + "related": ".xml" + } + } + }, + "NUnit/3.13.3": { + "type": "package", + "dependencies": { + "NETStandard.Library": "2.0.0" + }, + "compile": { + "lib/netstandard2.0/nunit.framework.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/nunit.framework.dll": { + "related": ".xml" + } + }, + "build": { + "build/NUnit.props": {} + } + }, + "NUnit.Analyzers/3.6.1": { + "type": "package" + }, + "NUnit3TestAdapter/4.2.1": { + "type": "package", + "build": { + "build/netcoreapp2.1/NUnit3TestAdapter.props": {} + } + }, + "System.Diagnostics.EventLog/6.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.Diagnostics.EventLog.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Diagnostics.EventLog.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp3.1/_._": {} + }, + "runtimeTargets": { + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.Messages.dll": { + "assetType": "runtime", + "rid": "win" + }, + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Reflection.Metadata/1.6.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + } + }, + "AudioWaveOutClassLibrary/1.0.0": { + "type": "project", + "framework": ".NETCoreApp,Version=v8.0", + "compile": { + "bin/placeholder/AudioWaveOutClassLibrary.dll": {} + }, + "runtime": { + "bin/placeholder/AudioWaveOutClassLibrary.dll": {} + } + } + } + }, + "libraries": { + "Castle.Core/5.1.1": { + "sha512": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", + "type": "package", + "path": "castle.core/5.1.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ASL - Apache Software Foundation License.txt", + "CHANGELOG.md", + "LICENSE", + "castle-logo.png", + "castle.core.5.1.1.nupkg.sha512", + "castle.core.nuspec", + "lib/net462/Castle.Core.dll", + "lib/net462/Castle.Core.xml", + "lib/net6.0/Castle.Core.dll", + "lib/net6.0/Castle.Core.xml", + "lib/netstandard2.0/Castle.Core.dll", + "lib/netstandard2.0/Castle.Core.xml", + "lib/netstandard2.1/Castle.Core.dll", + "lib/netstandard2.1/Castle.Core.xml", + "readme.txt" + ] + }, + "coverlet.collector/6.0.0": { + "sha512": "tW3lsNS+dAEII6YGUX/VMoJjBS1QvsxqJeqLaJXub08y1FSjasFPtQ4UBUsudE9PNrzLjooClMsPtY2cZLdXpQ==", + "type": "package", + "path": "coverlet.collector/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/netstandard1.0/Microsoft.Bcl.AsyncInterfaces.dll", + "build/netstandard1.0/Microsoft.CSharp.dll", + "build/netstandard1.0/Microsoft.DotNet.PlatformAbstractions.dll", + "build/netstandard1.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", + "build/netstandard1.0/Microsoft.Extensions.DependencyInjection.dll", + "build/netstandard1.0/Microsoft.Extensions.DependencyModel.dll", + "build/netstandard1.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "build/netstandard1.0/Microsoft.TestPlatform.CoreUtilities.dll", + "build/netstandard1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netstandard1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "build/netstandard1.0/Mono.Cecil.Mdb.dll", + "build/netstandard1.0/Mono.Cecil.Pdb.dll", + "build/netstandard1.0/Mono.Cecil.Rocks.dll", + "build/netstandard1.0/Mono.Cecil.dll", + "build/netstandard1.0/Newtonsoft.Json.dll", + "build/netstandard1.0/NuGet.Frameworks.dll", + "build/netstandard1.0/System.AppContext.dll", + "build/netstandard1.0/System.Collections.Immutable.dll", + "build/netstandard1.0/System.Dynamic.Runtime.dll", + "build/netstandard1.0/System.IO.FileSystem.Primitives.dll", + "build/netstandard1.0/System.Linq.Expressions.dll", + "build/netstandard1.0/System.Linq.dll", + "build/netstandard1.0/System.ObjectModel.dll", + "build/netstandard1.0/System.Reflection.Emit.ILGeneration.dll", + "build/netstandard1.0/System.Reflection.Emit.Lightweight.dll", + "build/netstandard1.0/System.Reflection.Emit.dll", + "build/netstandard1.0/System.Reflection.Metadata.dll", + "build/netstandard1.0/System.Reflection.TypeExtensions.dll", + "build/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll", + "build/netstandard1.0/System.Runtime.Serialization.Primitives.dll", + "build/netstandard1.0/System.Text.RegularExpressions.dll", + "build/netstandard1.0/System.Threading.Tasks.Extensions.dll", + "build/netstandard1.0/System.Threading.dll", + "build/netstandard1.0/System.Xml.ReaderWriter.dll", + "build/netstandard1.0/System.Xml.XDocument.dll", + "build/netstandard1.0/coverlet.collector.deps.json", + "build/netstandard1.0/coverlet.collector.dll", + "build/netstandard1.0/coverlet.collector.pdb", + "build/netstandard1.0/coverlet.collector.targets", + "build/netstandard1.0/coverlet.core.dll", + "build/netstandard1.0/coverlet.core.pdb", + "coverlet-icon.png", + "coverlet.collector.6.0.0.nupkg.sha512", + "coverlet.collector.nuspec" + ] + }, + "Microsoft.CodeCoverage/17.6.0": { + "sha512": "5v2GwzpR7JEuQUzupjx3zLwn2FutADW/weLzLt726DR3WXxsM+ICPoJG6pxuKFsumtZp890UrVuudTUhsE8Qyg==", + "type": "package", + "path": "microsoft.codecoverage/17.6.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "ThirdPartyNotices.txt", + "build/netstandard2.0/CodeCoverage/CodeCoverage.config", + "build/netstandard2.0/CodeCoverage/CodeCoverage.exe", + "build/netstandard2.0/CodeCoverage/VanguardInstrumentationProfiler_x86.config", + "build/netstandard2.0/CodeCoverage/amd64/CodeCoverage.exe", + "build/netstandard2.0/CodeCoverage/amd64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard2.0/CodeCoverage/amd64/covrun64.dll", + "build/netstandard2.0/CodeCoverage/amd64/msdia140.dll", + "build/netstandard2.0/CodeCoverage/arm64/VanguardInstrumentationProfiler_arm64.config", + "build/netstandard2.0/CodeCoverage/arm64/covrunarm64.dll", + "build/netstandard2.0/CodeCoverage/arm64/msdia140.dll", + "build/netstandard2.0/CodeCoverage/codecoveragemessages.dll", + "build/netstandard2.0/CodeCoverage/coreclr/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "build/netstandard2.0/CodeCoverage/covrun32.dll", + "build/netstandard2.0/CodeCoverage/msdia140.dll", + "build/netstandard2.0/InstrumentationEngine/alpine/x64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard2.0/InstrumentationEngine/alpine/x64/libCoverageInstrumentationMethod.so", + "build/netstandard2.0/InstrumentationEngine/alpine/x64/libInstrumentationEngine.so", + "build/netstandard2.0/InstrumentationEngine/arm64/MicrosoftInstrumentationEngine_arm64.dll", + "build/netstandard2.0/InstrumentationEngine/macos/x64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard2.0/InstrumentationEngine/macos/x64/libCoverageInstrumentationMethod.dylib", + "build/netstandard2.0/InstrumentationEngine/macos/x64/libInstrumentationEngine.dylib", + "build/netstandard2.0/InstrumentationEngine/ubuntu/x64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard2.0/InstrumentationEngine/ubuntu/x64/libCoverageInstrumentationMethod.so", + "build/netstandard2.0/InstrumentationEngine/ubuntu/x64/libInstrumentationEngine.so", + "build/netstandard2.0/InstrumentationEngine/x64/MicrosoftInstrumentationEngine_x64.dll", + "build/netstandard2.0/InstrumentationEngine/x86/MicrosoftInstrumentationEngine_x86.dll", + "build/netstandard2.0/Microsoft.CodeCoverage.Core.dll", + "build/netstandard2.0/Microsoft.CodeCoverage.Instrumentation.dll", + "build/netstandard2.0/Microsoft.CodeCoverage.Interprocess.dll", + "build/netstandard2.0/Microsoft.CodeCoverage.props", + "build/netstandard2.0/Microsoft.CodeCoverage.targets", + "build/netstandard2.0/Microsoft.DiaSymReader.dll", + "build/netstandard2.0/Microsoft.VisualStudio.TraceDataCollector.dll", + "build/netstandard2.0/Mono.Cecil.Pdb.dll", + "build/netstandard2.0/Mono.Cecil.Rocks.dll", + "build/netstandard2.0/Mono.Cecil.dll", + "build/netstandard2.0/ThirdPartyNotices.txt", + "build/netstandard2.0/cs/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/de/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/es/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/fr/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/it/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/ja/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/ko/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/pl/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/pt-BR/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/ru/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/tr/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/zh-Hans/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard2.0/zh-Hant/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "lib/net462/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "lib/netcoreapp3.1/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "microsoft.codecoverage.17.6.0.nupkg.sha512", + "microsoft.codecoverage.nuspec" + ] + }, + "Microsoft.NET.Test.Sdk/17.6.0": { + "sha512": "tHyg4C6c89QvLv6Utz3xKlba4EeoyJyIz59Q1NrjRENV7gfGnSE6I+sYPIbVOzQttoo2zpHDgOK/p6Hw2OlD7A==", + "type": "package", + "path": "microsoft.net.test.sdk/17.6.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "build/net462/Microsoft.NET.Test.Sdk.props", + "build/net462/Microsoft.NET.Test.Sdk.targets", + "build/netcoreapp3.1/Microsoft.NET.Test.Sdk.Program.cs", + "build/netcoreapp3.1/Microsoft.NET.Test.Sdk.Program.fs", + "build/netcoreapp3.1/Microsoft.NET.Test.Sdk.Program.vb", + "build/netcoreapp3.1/Microsoft.NET.Test.Sdk.props", + "build/netcoreapp3.1/Microsoft.NET.Test.Sdk.targets", + "buildMultiTargeting/Microsoft.NET.Test.Sdk.props", + "lib/net462/_._", + "lib/netcoreapp3.1/_._", + "microsoft.net.test.sdk.17.6.0.nupkg.sha512", + "microsoft.net.test.sdk.nuspec" + ] + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "type": "package", + "path": "microsoft.netcore.platforms/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json" + ] + }, + "Microsoft.TestPlatform.ObjectModel/17.6.0": { + "sha512": "AA/rrf5zwC5/OBLEOajkhjbVTM3SvxRXy8kcQ8e4mJKojbyZvqqhpfNg362N9vXU94DLg9NUTFOAnoYVT0pTJw==", + "type": "package", + "path": "microsoft.testplatform.objectmodel/17.6.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "lib/net462/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/net462/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/net462/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/net462/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net462/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net462/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netcoreapp3.1/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp3.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netstandard2.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netstandard2.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "microsoft.testplatform.objectmodel.17.6.0.nupkg.sha512", + "microsoft.testplatform.objectmodel.nuspec" + ] + }, + "Microsoft.TestPlatform.TestHost/17.6.0": { + "sha512": "7YdgUcIeCPVKLC7n7LNKDiEHWc7z3brkkYPdUbDnFsvf6WvY9UfzS0VSUJ8P2NgN0CDSD223GCJFSjSBLZRqOQ==", + "type": "package", + "path": "microsoft.testplatform.testhost/17.6.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "ThirdPartyNotices.txt", + "build/netcoreapp3.1/Microsoft.TestPlatform.TestHost.props", + "build/netcoreapp3.1/x64/testhost.dll", + "build/netcoreapp3.1/x64/testhost.exe", + "build/netcoreapp3.1/x86/testhost.x86.dll", + "build/netcoreapp3.1/x86/testhost.x86.exe", + "lib/net462/_._", + "lib/netcoreapp3.1/Microsoft.TestPlatform.CommunicationUtilities.dll", + "lib/netcoreapp3.1/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netcoreapp3.1/Microsoft.TestPlatform.CrossPlatEngine.dll", + "lib/netcoreapp3.1/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netcoreapp3.1/Microsoft.TestPlatform.Utilities.dll", + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.Common.dll", + "lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/testhost.deps.json", + "lib/netcoreapp3.1/testhost.dll", + "lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/x64/msdia140.dll", + "lib/netcoreapp3.1/x86/msdia140.dll", + "lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp3.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "microsoft.testplatform.testhost.17.6.0.nupkg.sha512", + "microsoft.testplatform.testhost.nuspec" + ] + }, + "Moq/4.20.70": { + "sha512": "4rNnAwdpXJBuxqrOCzCyICXHSImOTRktCgCWXWykuF1qwoIsVvEnR7PjbMk/eLOxWvhmj5Kwt+kDV3RGUYcNwg==", + "type": "package", + "path": "moq/4.20.70", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "icon.png", + "lib/net462/Moq.dll", + "lib/net462/Moq.xml", + "lib/net6.0/Moq.dll", + "lib/net6.0/Moq.xml", + "lib/netstandard2.0/Moq.dll", + "lib/netstandard2.0/Moq.xml", + "lib/netstandard2.1/Moq.dll", + "lib/netstandard2.1/Moq.xml", + "moq.4.20.70.nupkg.sha512", + "moq.nuspec", + "readme.md" + ] + }, + "NETStandard.Library/2.0.0": { + "sha512": "7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYmBPA==", + "type": "package", + "path": "netstandard.library/2.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "build/NETStandard.Library.targets", + "build/netstandard2.0/NETStandard.Library.targets", + "build/netstandard2.0/ref/Microsoft.Win32.Primitives.dll", + "build/netstandard2.0/ref/System.AppContext.dll", + "build/netstandard2.0/ref/System.Collections.Concurrent.dll", + "build/netstandard2.0/ref/System.Collections.NonGeneric.dll", + "build/netstandard2.0/ref/System.Collections.Specialized.dll", + "build/netstandard2.0/ref/System.Collections.dll", + "build/netstandard2.0/ref/System.ComponentModel.Composition.dll", + "build/netstandard2.0/ref/System.ComponentModel.EventBasedAsync.dll", + "build/netstandard2.0/ref/System.ComponentModel.Primitives.dll", + "build/netstandard2.0/ref/System.ComponentModel.TypeConverter.dll", + "build/netstandard2.0/ref/System.ComponentModel.dll", + "build/netstandard2.0/ref/System.Console.dll", + "build/netstandard2.0/ref/System.Core.dll", + "build/netstandard2.0/ref/System.Data.Common.dll", + "build/netstandard2.0/ref/System.Data.dll", + "build/netstandard2.0/ref/System.Diagnostics.Contracts.dll", + "build/netstandard2.0/ref/System.Diagnostics.Debug.dll", + "build/netstandard2.0/ref/System.Diagnostics.FileVersionInfo.dll", + "build/netstandard2.0/ref/System.Diagnostics.Process.dll", + "build/netstandard2.0/ref/System.Diagnostics.StackTrace.dll", + "build/netstandard2.0/ref/System.Diagnostics.TextWriterTraceListener.dll", + "build/netstandard2.0/ref/System.Diagnostics.Tools.dll", + "build/netstandard2.0/ref/System.Diagnostics.TraceSource.dll", + "build/netstandard2.0/ref/System.Diagnostics.Tracing.dll", + "build/netstandard2.0/ref/System.Drawing.Primitives.dll", + "build/netstandard2.0/ref/System.Drawing.dll", + "build/netstandard2.0/ref/System.Dynamic.Runtime.dll", + "build/netstandard2.0/ref/System.Globalization.Calendars.dll", + "build/netstandard2.0/ref/System.Globalization.Extensions.dll", + "build/netstandard2.0/ref/System.Globalization.dll", + "build/netstandard2.0/ref/System.IO.Compression.FileSystem.dll", + "build/netstandard2.0/ref/System.IO.Compression.ZipFile.dll", + "build/netstandard2.0/ref/System.IO.Compression.dll", + "build/netstandard2.0/ref/System.IO.FileSystem.DriveInfo.dll", + "build/netstandard2.0/ref/System.IO.FileSystem.Primitives.dll", + "build/netstandard2.0/ref/System.IO.FileSystem.Watcher.dll", + "build/netstandard2.0/ref/System.IO.FileSystem.dll", + "build/netstandard2.0/ref/System.IO.IsolatedStorage.dll", + "build/netstandard2.0/ref/System.IO.MemoryMappedFiles.dll", + "build/netstandard2.0/ref/System.IO.Pipes.dll", + "build/netstandard2.0/ref/System.IO.UnmanagedMemoryStream.dll", + "build/netstandard2.0/ref/System.IO.dll", + "build/netstandard2.0/ref/System.Linq.Expressions.dll", + "build/netstandard2.0/ref/System.Linq.Parallel.dll", + "build/netstandard2.0/ref/System.Linq.Queryable.dll", + "build/netstandard2.0/ref/System.Linq.dll", + "build/netstandard2.0/ref/System.Net.Http.dll", + "build/netstandard2.0/ref/System.Net.NameResolution.dll", + "build/netstandard2.0/ref/System.Net.NetworkInformation.dll", + "build/netstandard2.0/ref/System.Net.Ping.dll", + "build/netstandard2.0/ref/System.Net.Primitives.dll", + "build/netstandard2.0/ref/System.Net.Requests.dll", + "build/netstandard2.0/ref/System.Net.Security.dll", + "build/netstandard2.0/ref/System.Net.Sockets.dll", + "build/netstandard2.0/ref/System.Net.WebHeaderCollection.dll", + "build/netstandard2.0/ref/System.Net.WebSockets.Client.dll", + "build/netstandard2.0/ref/System.Net.WebSockets.dll", + "build/netstandard2.0/ref/System.Net.dll", + "build/netstandard2.0/ref/System.Numerics.dll", + "build/netstandard2.0/ref/System.ObjectModel.dll", + "build/netstandard2.0/ref/System.Reflection.Extensions.dll", + "build/netstandard2.0/ref/System.Reflection.Primitives.dll", + "build/netstandard2.0/ref/System.Reflection.dll", + "build/netstandard2.0/ref/System.Resources.Reader.dll", + "build/netstandard2.0/ref/System.Resources.ResourceManager.dll", + "build/netstandard2.0/ref/System.Resources.Writer.dll", + "build/netstandard2.0/ref/System.Runtime.CompilerServices.VisualC.dll", + "build/netstandard2.0/ref/System.Runtime.Extensions.dll", + "build/netstandard2.0/ref/System.Runtime.Handles.dll", + "build/netstandard2.0/ref/System.Runtime.InteropServices.RuntimeInformation.dll", + "build/netstandard2.0/ref/System.Runtime.InteropServices.dll", + "build/netstandard2.0/ref/System.Runtime.Numerics.dll", + "build/netstandard2.0/ref/System.Runtime.Serialization.Formatters.dll", + "build/netstandard2.0/ref/System.Runtime.Serialization.Json.dll", + "build/netstandard2.0/ref/System.Runtime.Serialization.Primitives.dll", + "build/netstandard2.0/ref/System.Runtime.Serialization.Xml.dll", + "build/netstandard2.0/ref/System.Runtime.Serialization.dll", + "build/netstandard2.0/ref/System.Runtime.dll", + "build/netstandard2.0/ref/System.Security.Claims.dll", + "build/netstandard2.0/ref/System.Security.Cryptography.Algorithms.dll", + "build/netstandard2.0/ref/System.Security.Cryptography.Csp.dll", + "build/netstandard2.0/ref/System.Security.Cryptography.Encoding.dll", + "build/netstandard2.0/ref/System.Security.Cryptography.Primitives.dll", + "build/netstandard2.0/ref/System.Security.Cryptography.X509Certificates.dll", + "build/netstandard2.0/ref/System.Security.Principal.dll", + "build/netstandard2.0/ref/System.Security.SecureString.dll", + "build/netstandard2.0/ref/System.ServiceModel.Web.dll", + "build/netstandard2.0/ref/System.Text.Encoding.Extensions.dll", + "build/netstandard2.0/ref/System.Text.Encoding.dll", + "build/netstandard2.0/ref/System.Text.RegularExpressions.dll", + "build/netstandard2.0/ref/System.Threading.Overlapped.dll", + "build/netstandard2.0/ref/System.Threading.Tasks.Parallel.dll", + "build/netstandard2.0/ref/System.Threading.Tasks.dll", + "build/netstandard2.0/ref/System.Threading.Thread.dll", + "build/netstandard2.0/ref/System.Threading.ThreadPool.dll", + "build/netstandard2.0/ref/System.Threading.Timer.dll", + "build/netstandard2.0/ref/System.Threading.dll", + "build/netstandard2.0/ref/System.Transactions.dll", + "build/netstandard2.0/ref/System.ValueTuple.dll", + "build/netstandard2.0/ref/System.Web.dll", + "build/netstandard2.0/ref/System.Windows.dll", + "build/netstandard2.0/ref/System.Xml.Linq.dll", + "build/netstandard2.0/ref/System.Xml.ReaderWriter.dll", + "build/netstandard2.0/ref/System.Xml.Serialization.dll", + "build/netstandard2.0/ref/System.Xml.XDocument.dll", + "build/netstandard2.0/ref/System.Xml.XPath.XDocument.dll", + "build/netstandard2.0/ref/System.Xml.XPath.dll", + "build/netstandard2.0/ref/System.Xml.XmlDocument.dll", + "build/netstandard2.0/ref/System.Xml.XmlSerializer.dll", + "build/netstandard2.0/ref/System.Xml.dll", + "build/netstandard2.0/ref/System.dll", + "build/netstandard2.0/ref/mscorlib.dll", + "build/netstandard2.0/ref/netstandard.dll", + "build/netstandard2.0/ref/netstandard.xml", + "lib/netstandard1.0/_._", + "netstandard.library.2.0.0.nupkg.sha512", + "netstandard.library.nuspec" + ] + }, + "Newtonsoft.Json/13.0.1": { + "sha512": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==", + "type": "package", + "path": "newtonsoft.json/13.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/netstandard1.0/Newtonsoft.Json.dll", + "lib/netstandard1.0/Newtonsoft.Json.xml", + "lib/netstandard1.3/Newtonsoft.Json.dll", + "lib/netstandard1.3/Newtonsoft.Json.xml", + "lib/netstandard2.0/Newtonsoft.Json.dll", + "lib/netstandard2.0/Newtonsoft.Json.xml", + "newtonsoft.json.13.0.1.nupkg.sha512", + "newtonsoft.json.nuspec", + "packageIcon.png" + ] + }, + "NLog/5.3.2": { + "sha512": "cQRQZuDMjSyMe9EQBnI9v55YAMMz8GAfFd6fFJ6tc/kXnG7Hze8p1I8MgvWSBG6E36wA8vSxRrlm8uSIG+SENg==", + "type": "package", + "path": "nlog/5.3.2", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "N.png", + "lib/net35/NLog.dll", + "lib/net35/NLog.xml", + "lib/net45/NLog.dll", + "lib/net45/NLog.xml", + "lib/net46/NLog.dll", + "lib/net46/NLog.xml", + "lib/netstandard1.3/NLog.dll", + "lib/netstandard1.3/NLog.xml", + "lib/netstandard1.5/NLog.dll", + "lib/netstandard1.5/NLog.xml", + "lib/netstandard2.0/NLog.dll", + "lib/netstandard2.0/NLog.xml", + "nlog.5.3.2.nupkg.sha512", + "nlog.nuspec" + ] + }, + "NuGet.Frameworks/5.11.0": { + "sha512": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q==", + "type": "package", + "path": "nuget.frameworks/5.11.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "icon.png", + "lib/net40/NuGet.Frameworks.dll", + "lib/net40/NuGet.Frameworks.xml", + "lib/net472/NuGet.Frameworks.dll", + "lib/net472/NuGet.Frameworks.xml", + "lib/netstandard2.0/NuGet.Frameworks.dll", + "lib/netstandard2.0/NuGet.Frameworks.xml", + "nuget.frameworks.5.11.0.nupkg.sha512", + "nuget.frameworks.nuspec" + ] + }, + "NUnit/3.13.3": { + "sha512": "KNPDpls6EfHwC3+nnA67fh5wpxeLb3VLFAfLxrug6JMYDLHH6InaQIWR7Sc3y75d/9IKzMksH/gi08W7XWbmnQ==", + "type": "package", + "path": "nunit/3.13.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "CHANGES.md", + "LICENSE.txt", + "NOTICES.txt", + "build/NUnit.props", + "icon.png", + "lib/net35/nunit.framework.dll", + "lib/net35/nunit.framework.xml", + "lib/net40/nunit.framework.dll", + "lib/net40/nunit.framework.xml", + "lib/net45/nunit.framework.dll", + "lib/net45/nunit.framework.xml", + "lib/netstandard2.0/nunit.framework.dll", + "lib/netstandard2.0/nunit.framework.xml", + "nunit.3.13.3.nupkg.sha512", + "nunit.nuspec" + ] + }, + "NUnit.Analyzers/3.6.1": { + "sha512": "RKP9tpKfl3DmRgUDGgh3XM3XzeLMrCXXMZm6vm1nMsObZ6vtQL1L9NrK7+oZh1jWearvNsbMis2+AIOY3NFmow==", + "type": "package", + "path": "nunit.analyzers/3.6.1", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "analyzers/dotnet/cs/nunit.analyzers.dll", + "docs/README.md", + "images/nunit_256.png", + "license.txt", + "nunit.analyzers.3.6.1.nupkg.sha512", + "nunit.analyzers.nuspec", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "NUnit3TestAdapter/4.2.1": { + "sha512": "kgH8VKsrcZZgNGQXRpVCrM7TnNz9li3b/snH+YmnXUNqsaWa1Xw9EQWHpbzq4Li2FbTjTE/E5N5HdLNXzZ8BpQ==", + "type": "package", + "path": "nunit3testadapter/4.2.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/net35/NUnit3.TestAdapter.dll", + "build/net35/NUnit3.TestAdapter.pdb", + "build/net35/NUnit3TestAdapter.props", + "build/net35/nunit.engine.api.dll", + "build/net35/nunit.engine.core.dll", + "build/net35/nunit.engine.dll", + "build/net35/testcentric.engine.metadata.dll", + "build/netcoreapp2.1/NUnit3.TestAdapter.dll", + "build/netcoreapp2.1/NUnit3.TestAdapter.pdb", + "build/netcoreapp2.1/NUnit3TestAdapter.props", + "build/netcoreapp2.1/nunit.engine.api.dll", + "build/netcoreapp2.1/nunit.engine.core.dll", + "build/netcoreapp2.1/nunit.engine.dll", + "build/netcoreapp2.1/testcentric.engine.metadata.dll", + "nunit3testadapter.4.2.1.nupkg.sha512", + "nunit3testadapter.nuspec" + ] + }, + "System.Diagnostics.EventLog/6.0.0": { + "sha512": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==", + "type": "package", + "path": "system.diagnostics.eventlog/6.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/netcoreapp2.0/System.Diagnostics.EventLog.targets", + "buildTransitive/netcoreapp3.1/_._", + "lib/net461/System.Diagnostics.EventLog.dll", + "lib/net461/System.Diagnostics.EventLog.xml", + "lib/net6.0/System.Diagnostics.EventLog.dll", + "lib/net6.0/System.Diagnostics.EventLog.xml", + "lib/netcoreapp3.1/System.Diagnostics.EventLog.dll", + "lib/netcoreapp3.1/System.Diagnostics.EventLog.xml", + "lib/netstandard2.0/System.Diagnostics.EventLog.dll", + "lib/netstandard2.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/net6.0/System.Diagnostics.EventLog.xml", + "runtimes/win/lib/netcoreapp3.1/System.Diagnostics.EventLog.Messages.dll", + "runtimes/win/lib/netcoreapp3.1/System.Diagnostics.EventLog.dll", + "runtimes/win/lib/netcoreapp3.1/System.Diagnostics.EventLog.xml", + "system.diagnostics.eventlog.6.0.0.nupkg.sha512", + "system.diagnostics.eventlog.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Reflection.Metadata/1.6.0": { + "sha512": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==", + "type": "package", + "path": "system.reflection.metadata/1.6.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/netstandard1.1/System.Reflection.Metadata.dll", + "lib/netstandard1.1/System.Reflection.Metadata.xml", + "lib/netstandard2.0/System.Reflection.Metadata.dll", + "lib/netstandard2.0/System.Reflection.Metadata.xml", + "lib/portable-net45+win8/System.Reflection.Metadata.dll", + "lib/portable-net45+win8/System.Reflection.Metadata.xml", + "system.reflection.metadata.1.6.0.nupkg.sha512", + "system.reflection.metadata.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "AudioWaveOutClassLibrary/1.0.0": { + "type": "project", + "path": "../AudioWaveOutClassLibrary/AudioWaveOutClassLibrary.csproj", + "msbuildProject": "../AudioWaveOutClassLibrary/AudioWaveOutClassLibrary.csproj" + } + }, + "projectFileDependencyGroups": { + "net8.0": [ + "AudioWaveOutClassLibrary >= 1.0.0", + "Microsoft.NET.Test.Sdk >= 17.6.0", + "Moq >= 4.20.70", + "NLog >= 5.3.2", + "NUnit >= 3.13.3", + "NUnit.Analyzers >= 3.6.1", + "NUnit3TestAdapter >= 4.2.1", + "coverlet.collector >= 6.0.0" + ] + }, + "packageFolders": { + "C:\\Users\\38096\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutUnitTest\\AudioWaveOutUnitTest.csproj", + "projectName": "AudioWaveOutUnitTest", + "projectPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutUnitTest\\AudioWaveOutUnitTest.csproj", + "packagesPath": "C:\\Users\\38096\\.nuget\\packages\\", + "outputPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutUnitTest\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\38096\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": { + "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj": { + "projectPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutClassLibrary\\AudioWaveOutClassLibrary.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "Microsoft.NET.Test.Sdk": { + "target": "Package", + "version": "[17.6.0, )" + }, + "Moq": { + "target": "Package", + "version": "[4.20.70, )" + }, + "NLog": { + "target": "Package", + "version": "[5.3.2, )" + }, + "NUnit": { + "target": "Package", + "version": "[3.13.3, )" + }, + "NUnit.Analyzers": { + "target": "Package", + "version": "[3.6.1, )" + }, + "NUnit3TestAdapter": { + "target": "Package", + "version": "[4.2.1, )" + }, + "coverlet.collector": { + "target": "Package", + "version": "[6.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/AudioWaveOutUnitTest/obj/project.nuget.cache b/AudioWaveOutUnitTest/obj/project.nuget.cache new file mode 100644 index 0000000..4949093 --- /dev/null +++ b/AudioWaveOutUnitTest/obj/project.nuget.cache @@ -0,0 +1,26 @@ +{ + "version": 2, + "dgSpecHash": "963hzHv7SomkF7Qnbg0UrmTnHGkDXf3KZuWOhROcbJH4Y0tpBWKZvlLrnVvr+xlqhk8t3MlAuKlqmvP3kDZBGw==", + "success": true, + "projectFilePath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\AudioWaveOutUnitTest\\AudioWaveOutUnitTest.csproj", + "expectedPackageFiles": [ + "C:\\Users\\38096\\.nuget\\packages\\castle.core\\5.1.1\\castle.core.5.1.1.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\coverlet.collector\\6.0.0\\coverlet.collector.6.0.0.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\microsoft.codecoverage\\17.6.0\\microsoft.codecoverage.17.6.0.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\microsoft.net.test.sdk\\17.6.0\\microsoft.net.test.sdk.17.6.0.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.0\\microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\microsoft.testplatform.objectmodel\\17.6.0\\microsoft.testplatform.objectmodel.17.6.0.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\microsoft.testplatform.testhost\\17.6.0\\microsoft.testplatform.testhost.17.6.0.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\moq\\4.20.70\\moq.4.20.70.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\netstandard.library\\2.0.0\\netstandard.library.2.0.0.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\newtonsoft.json\\13.0.1\\newtonsoft.json.13.0.1.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\nlog\\5.3.2\\nlog.5.3.2.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\nuget.frameworks\\5.11.0\\nuget.frameworks.5.11.0.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\nunit\\3.13.3\\nunit.3.13.3.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\nunit.analyzers\\3.6.1\\nunit.analyzers.3.6.1.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\nunit3testadapter\\4.2.1\\nunit3testadapter.4.2.1.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\system.diagnostics.eventlog\\6.0.0\\system.diagnostics.eventlog.6.0.0.nupkg.sha512", + "C:\\Users\\38096\\.nuget\\packages\\system.reflection.metadata\\1.6.0\\system.reflection.metadata.1.6.0.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/CelestialRTP.sln b/CelestialRTP.sln new file mode 100644 index 0000000..e4ce924 --- /dev/null +++ b/CelestialRTP.sln @@ -0,0 +1,47 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34330.188 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CelestialRTP", "CelestialRTP\CelestialRTP.csproj", "{7432B99B-0AFA-477D-B7F8-77E253EB8D33}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AudioWaveOut", "AudioWaveOut", "{766801AD-6F44-4488-963B-166E0EE46902}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AudioWaveOutClassLibrary", "AudioWaveOutClassLibrary\AudioWaveOutClassLibrary.csproj", "{5F70F0F8-0233-49F3-8E94-87FD9B459AC0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AudioLibraryUnitTests", "AudioLibraryUnitTests", "{BD87B51B-8B84-4352-84E0-51A942C787BB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AudioWaveOutUnitTest", "AudioWaveOutUnitTest\AudioWaveOutUnitTest.csproj", "{6CBFC9A3-AF84-4903-82E1-3BAAAEB66A3C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{7C5450DB-B97C-428F-8875-A3B3F9DADBE4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7432B99B-0AFA-477D-B7F8-77E253EB8D33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7432B99B-0AFA-477D-B7F8-77E253EB8D33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7432B99B-0AFA-477D-B7F8-77E253EB8D33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7432B99B-0AFA-477D-B7F8-77E253EB8D33}.Release|Any CPU.Build.0 = Release|Any CPU + {5F70F0F8-0233-49F3-8E94-87FD9B459AC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F70F0F8-0233-49F3-8E94-87FD9B459AC0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F70F0F8-0233-49F3-8E94-87FD9B459AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F70F0F8-0233-49F3-8E94-87FD9B459AC0}.Release|Any CPU.Build.0 = Release|Any CPU + {6CBFC9A3-AF84-4903-82E1-3BAAAEB66A3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6CBFC9A3-AF84-4903-82E1-3BAAAEB66A3C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6CBFC9A3-AF84-4903-82E1-3BAAAEB66A3C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6CBFC9A3-AF84-4903-82E1-3BAAAEB66A3C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {5F70F0F8-0233-49F3-8E94-87FD9B459AC0} = {766801AD-6F44-4488-963B-166E0EE46902} + {6CBFC9A3-AF84-4903-82E1-3BAAAEB66A3C} = {BD87B51B-8B84-4352-84E0-51A942C787BB} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DDE883EF-0A40-4BA0-9B46-3A271410918D} + EndGlobalSection +EndGlobal diff --git a/CelestialRTP/.vs/CelestialRTP/v17/.suo b/CelestialRTP/.vs/CelestialRTP/v17/.suo new file mode 100644 index 0000000..1dae9ae Binary files /dev/null and b/CelestialRTP/.vs/CelestialRTP/v17/.suo differ diff --git a/CelestialRTP/CelestialRTP.csproj b/CelestialRTP/CelestialRTP.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/CelestialRTP/CelestialRTP.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/CelestialRTP/Program.cs b/CelestialRTP/Program.cs new file mode 100644 index 0000000..2788b43 --- /dev/null +++ b/CelestialRTP/Program.cs @@ -0,0 +1,10 @@ +namespace CelestialRTP +{ + internal class Program + { + static void Main(string[] args) + { + + } + } +} diff --git a/CelestialRTP/bin/Debug/net8.0/CelestialRTP.deps.json b/CelestialRTP/bin/Debug/net8.0/CelestialRTP.deps.json new file mode 100644 index 0000000..9b74393 --- /dev/null +++ b/CelestialRTP/bin/Debug/net8.0/CelestialRTP.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "CelestialRTP/1.0.0": { + "runtime": { + "CelestialRTP.dll": {} + } + } + } + }, + "libraries": { + "CelestialRTP/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/CelestialRTP/bin/Debug/net8.0/CelestialRTP.dll b/CelestialRTP/bin/Debug/net8.0/CelestialRTP.dll new file mode 100644 index 0000000..24a6074 Binary files /dev/null and b/CelestialRTP/bin/Debug/net8.0/CelestialRTP.dll differ diff --git a/CelestialRTP/bin/Debug/net8.0/CelestialRTP.exe b/CelestialRTP/bin/Debug/net8.0/CelestialRTP.exe new file mode 100644 index 0000000..c5cd2e1 Binary files /dev/null and b/CelestialRTP/bin/Debug/net8.0/CelestialRTP.exe differ diff --git a/CelestialRTP/bin/Debug/net8.0/CelestialRTP.pdb b/CelestialRTP/bin/Debug/net8.0/CelestialRTP.pdb new file mode 100644 index 0000000..cd46c44 Binary files /dev/null and b/CelestialRTP/bin/Debug/net8.0/CelestialRTP.pdb differ diff --git a/CelestialRTP/bin/Debug/net8.0/CelestialRTP.runtimeconfig.json b/CelestialRTP/bin/Debug/net8.0/CelestialRTP.runtimeconfig.json new file mode 100644 index 0000000..becfaea --- /dev/null +++ b/CelestialRTP/bin/Debug/net8.0/CelestialRTP.runtimeconfig.json @@ -0,0 +1,12 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/CelestialRTP/obj/CelestialRTP.csproj.nuget.dgspec.json b/CelestialRTP/obj/CelestialRTP.csproj.nuget.dgspec.json new file mode 100644 index 0000000..9e536c8 --- /dev/null +++ b/CelestialRTP/obj/CelestialRTP.csproj.nuget.dgspec.json @@ -0,0 +1,67 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\CelestialRTP\\CelestialRTP.csproj": {} + }, + "projects": { + "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\CelestialRTP\\CelestialRTP.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\CelestialRTP\\CelestialRTP.csproj", + "projectName": "CelestialRTP", + "projectPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\CelestialRTP\\CelestialRTP.csproj", + "packagesPath": "C:\\Users\\38096\\.nuget\\packages\\", + "outputPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\CelestialRTP\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\38096\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/CelestialRTP/obj/CelestialRTP.csproj.nuget.g.props b/CelestialRTP/obj/CelestialRTP.csproj.nuget.g.props new file mode 100644 index 0000000..a4c1339 --- /dev/null +++ b/CelestialRTP/obj/CelestialRTP.csproj.nuget.g.props @@ -0,0 +1,16 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\38096\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 6.8.0 + + + + + + \ No newline at end of file diff --git a/CelestialRTP/obj/CelestialRTP.csproj.nuget.g.targets b/CelestialRTP/obj/CelestialRTP.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/CelestialRTP/obj/CelestialRTP.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/CelestialRTP/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/CelestialRTP/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/CelestialRTP/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.AssemblyInfo.cs b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.AssemblyInfo.cs new file mode 100644 index 0000000..dc9104e --- /dev/null +++ b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("CelestialRTP")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("CelestialRTP")] +[assembly: System.Reflection.AssemblyTitleAttribute("CelestialRTP")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.AssemblyInfoInputs.cache b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.AssemblyInfoInputs.cache new file mode 100644 index 0000000..d98a3f8 --- /dev/null +++ b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +77fdc5e1b6bdc7082fbe023370f1feba44845ba8457b3c6baa4b46571335e35b diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.GeneratedMSBuildEditorConfig.editorconfig b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..922e370 --- /dev/null +++ b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = CelestialRTP +build_property.ProjectDir = C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.GlobalUsings.g.cs b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.assets.cache b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.assets.cache new file mode 100644 index 0000000..6369d76 Binary files /dev/null and b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.assets.cache differ diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.csproj.BuildWithSkipAnalyzers b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.csproj.BuildWithSkipAnalyzers new file mode 100644 index 0000000..e69de29 diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.csproj.CoreCompileInputs.cache b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..40a1c97 --- /dev/null +++ b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +4bef655ab0ddf58b03975c22c0b094f2f450f63faae632c2916694af53cfc45c diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.csproj.FileListAbsolute.txt b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..758cf9e --- /dev/null +++ b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.csproj.FileListAbsolute.txt @@ -0,0 +1,15 @@ +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\bin\Debug\net8.0\CelestialRTP.exe +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\bin\Debug\net8.0\CelestialRTP.deps.json +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\bin\Debug\net8.0\CelestialRTP.runtimeconfig.json +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\bin\Debug\net8.0\CelestialRTP.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\bin\Debug\net8.0\CelestialRTP.pdb +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\obj\Debug\net8.0\CelestialRTP.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\obj\Debug\net8.0\CelestialRTP.AssemblyInfoInputs.cache +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\obj\Debug\net8.0\CelestialRTP.AssemblyInfo.cs +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\obj\Debug\net8.0\CelestialRTP.csproj.CoreCompileInputs.cache +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\obj\Debug\net8.0\CelestialRTP.sourcelink.json +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\obj\Debug\net8.0\CelestialRTP.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\obj\Debug\net8.0\refint\CelestialRTP.dll +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\obj\Debug\net8.0\CelestialRTP.pdb +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\obj\Debug\net8.0\CelestialRTP.genruntimeconfig.cache +C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\obj\Debug\net8.0\ref\CelestialRTP.dll diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.dll b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.dll new file mode 100644 index 0000000..24a6074 Binary files /dev/null and b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.dll differ diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.genruntimeconfig.cache b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.genruntimeconfig.cache new file mode 100644 index 0000000..0995e7d --- /dev/null +++ b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.genruntimeconfig.cache @@ -0,0 +1 @@ +870898f9b8980bd07081b50542c273f13d1b0290561c79e9e043e7fe11665ad5 diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.pdb b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.pdb new file mode 100644 index 0000000..cd46c44 Binary files /dev/null and b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.pdb differ diff --git a/CelestialRTP/obj/Debug/net8.0/CelestialRTP.sourcelink.json b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.sourcelink.json new file mode 100644 index 0000000..5e20fcc --- /dev/null +++ b/CelestialRTP/obj/Debug/net8.0/CelestialRTP.sourcelink.json @@ -0,0 +1 @@ +{"documents":{"C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\*":"https://raw.githubusercontent.com/VotreWaken/CelestialRTP/14f3d16c9fe2c14675dbc3d2c20ed04315c581a0/*"}} \ No newline at end of file diff --git a/CelestialRTP/obj/Debug/net8.0/apphost.exe b/CelestialRTP/obj/Debug/net8.0/apphost.exe new file mode 100644 index 0000000..c5cd2e1 Binary files /dev/null and b/CelestialRTP/obj/Debug/net8.0/apphost.exe differ diff --git a/CelestialRTP/obj/Debug/net8.0/ref/CelestialRTP.dll b/CelestialRTP/obj/Debug/net8.0/ref/CelestialRTP.dll new file mode 100644 index 0000000..c468736 Binary files /dev/null and b/CelestialRTP/obj/Debug/net8.0/ref/CelestialRTP.dll differ diff --git a/CelestialRTP/obj/Debug/net8.0/refint/CelestialRTP.dll b/CelestialRTP/obj/Debug/net8.0/refint/CelestialRTP.dll new file mode 100644 index 0000000..c468736 Binary files /dev/null and b/CelestialRTP/obj/Debug/net8.0/refint/CelestialRTP.dll differ diff --git a/CelestialRTP/obj/Release/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/CelestialRTP/obj/Release/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..2217181 --- /dev/null +++ b/CelestialRTP/obj/Release/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/CelestialRTP/obj/Release/net8.0/CelestialRTP.AssemblyInfo.cs b/CelestialRTP/obj/Release/net8.0/CelestialRTP.AssemblyInfo.cs new file mode 100644 index 0000000..9543b8c --- /dev/null +++ b/CelestialRTP/obj/Release/net8.0/CelestialRTP.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("CelestialRTP")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("CelestialRTP")] +[assembly: System.Reflection.AssemblyTitleAttribute("CelestialRTP")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/CelestialRTP/obj/Release/net8.0/CelestialRTP.AssemblyInfoInputs.cache b/CelestialRTP/obj/Release/net8.0/CelestialRTP.AssemblyInfoInputs.cache new file mode 100644 index 0000000..da70c01 --- /dev/null +++ b/CelestialRTP/obj/Release/net8.0/CelestialRTP.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +8a1d27c340e9bae14f1a5dc995f7d1b1232d4782180f1d14069d37f16666bb0e diff --git a/CelestialRTP/obj/Release/net8.0/CelestialRTP.GeneratedMSBuildEditorConfig.editorconfig b/CelestialRTP/obj/Release/net8.0/CelestialRTP.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..922e370 --- /dev/null +++ b/CelestialRTP/obj/Release/net8.0/CelestialRTP.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = CelestialRTP +build_property.ProjectDir = C:\Users\38096\source\repos\CelestialRTP\CelestialRTP\CelestialRTP\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/CelestialRTP/obj/Release/net8.0/CelestialRTP.GlobalUsings.g.cs b/CelestialRTP/obj/Release/net8.0/CelestialRTP.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/CelestialRTP/obj/Release/net8.0/CelestialRTP.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/CelestialRTP/obj/Release/net8.0/CelestialRTP.assets.cache b/CelestialRTP/obj/Release/net8.0/CelestialRTP.assets.cache new file mode 100644 index 0000000..cd289d1 Binary files /dev/null and b/CelestialRTP/obj/Release/net8.0/CelestialRTP.assets.cache differ diff --git a/CelestialRTP/obj/project.assets.json b/CelestialRTP/obj/project.assets.json new file mode 100644 index 0000000..fb292d4 --- /dev/null +++ b/CelestialRTP/obj/project.assets.json @@ -0,0 +1,73 @@ +{ + "version": 3, + "targets": { + "net8.0": {} + }, + "libraries": {}, + "projectFileDependencyGroups": { + "net8.0": [] + }, + "packageFolders": { + "C:\\Users\\38096\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\CelestialRTP\\CelestialRTP.csproj", + "projectName": "CelestialRTP", + "projectPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\CelestialRTP\\CelestialRTP.csproj", + "packagesPath": "C:\\Users\\38096\\.nuget\\packages\\", + "outputPath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\CelestialRTP\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\38096\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/CelestialRTP/obj/project.nuget.cache b/CelestialRTP/obj/project.nuget.cache new file mode 100644 index 0000000..1e4f5d9 --- /dev/null +++ b/CelestialRTP/obj/project.nuget.cache @@ -0,0 +1,8 @@ +{ + "version": 2, + "dgSpecHash": "1IubbOnM9uqAnF4tM37ayA6jqaq+08IP3TLkYqbyrTGvjSi7t1gaHufvfBxfwglkgIfW4jl3eqStgrqFazgpmA==", + "success": true, + "projectFilePath": "C:\\Users\\38096\\source\\repos\\CelestialRTP\\CelestialRTP\\CelestialRTP\\CelestialRTP.csproj", + "expectedPackageFiles": [], + "logs": [] +} \ No newline at end of file diff --git a/License.txt b/License.txt new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md index ce4c0b0..2976395 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ | CI | win-x64 | linux-x64 | osx-x64 | |-|-|-|-| -| GitHub Actions | ![example workflow](https://github.com/VotreWaken/CelestialRTP/actions/workflows/dotnet.yml/badge.svg) | | | +| GitHub Actions | ![Win Workflow](https://github.com/VotreWaken/CelestialRTP/actions/workflows/dotnet.yml/badge.svg) | | | diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md new file mode 100644 index 0000000..e69de29