From 390dc02117ddb574fa0a91642708d2126c28cc10 Mon Sep 17 00:00:00 2001 From: Mercurio <47455213+NotLugozzi@users.noreply.github.com> Date: Mon, 9 Sep 2024 21:00:34 +0200 Subject: [PATCH] ASIO Recording --- 2dxAutoClip/iidxAutoClip.cs | 647 ++++++++++-------- .../obj/2dxAutoClip.csproj.nuget.dgspec.json | 26 +- .../obj/2dxAutoClip.csproj.nuget.g.props | 5 +- 2dxAutoClip/obj/project.assets.json | 25 +- 2dxAutoClip/obj/project.nuget.cache | 4 +- 2dxAutoClip/obj/project.packagespec.json | 2 +- .../obj/rider.project.model.nuget.info | 2 +- 2dxAutoClip/obj/rider.project.restore.info | 2 +- 8 files changed, 398 insertions(+), 315 deletions(-) diff --git a/2dxAutoClip/iidxAutoClip.cs b/2dxAutoClip/iidxAutoClip.cs index 2698386..f6289de 100644 --- a/2dxAutoClip/iidxAutoClip.cs +++ b/2dxAutoClip/iidxAutoClip.cs @@ -3,312 +3,389 @@ using System.Net.WebSockets; using System.Text; using NAudio.CoreAudioApi; using NAudio.Wave; +using NAudio.Wave.Asio; +using System.IO; -namespace _2dxAutoClip; - -class Program +namespace _2dxAutoClip { - private static readonly string WebsocketAddress = "localhost"; - private static readonly int WebsocketPort = 10573; - private static Process? _ffmpegProcess; - private static string _ffmpegFolderPath = GetDefaultVideosFolderPath(); - private static WasapiCapture? _waveSource; - private static WaveFileWriter _writer = null!; - private static string _audioFilePath = null!; - private static string _videoFilePath = null!; - private static string _resolution = "1920x1080"; // Default resolution - private static int _framerate = 60; // Default framerate - private static float _crf = 23; // Default CRF value - private static string _gameProcessName = "spice64"; // Default game process name - - private static async Task Main(string[] args) + class Program { - // Load settings from prop.txt - LoadSettingsFromPropFile(); + private static readonly string WebsocketAddress = "localhost"; + private static readonly int WebsocketPort = 10573; + private static Process? _ffmpegProcess; + private static string _ffmpegFolderPath = GetDefaultVideosFolderPath(); + private static WasapiCapture? _waveSource; + private static AsioOut? _asioSource; + private static WaveFileWriter _writer = null!; + private static string _audioFilePath = null!; + private static string _videoFilePath = null!; + private static string _resolution = "1920x1080"; // Default resolution + private static int _framerate = 60; // Default framerate + private static float _crf = 23; // Default CRF value + private static bool _useAsio = false; + private static string _gameProcessName = "spice64"; // Default game process name - var gameProcesses = Process.GetProcessesByName(_gameProcessName); - if (gameProcesses.Length > 0) + private static async Task Main(string[] args) { - Console.WriteLine($"Found {_gameProcessName}, Attempting connection to TickerHookWS..."); - await TryConnectWebSocket(); - } - else - { - Console.WriteLine($"Unable to find {_gameProcessName}. Is the game running and TickerHook enabled?"); - } - } - - private static void LoadSettingsFromPropFile() - { - const string filePath = "prop.txt"; - if (File.Exists(filePath)) - { - var fileContent = File.ReadAllText(filePath); - var lines = fileContent.Split('\n'); - foreach (var line in lines) + // Load settings from prop.txt + LoadSettingsFromPropFile(); + + var gameProcesses = Process.GetProcessesByName(_gameProcessName); + if (gameProcesses.Length > 0) { - if (line.StartsWith("path:")) - { - var path = line["path:".Length..].Trim(); - if (Directory.Exists(path)) - { - _ffmpegFolderPath = path; // Recording path - - } - else - { - Console.WriteLine($"The path specified in {filePath} does not exist. Using default recording path."); - _ffmpegFolderPath = GetDefaultVideosFolderPath(); - } - } - if (line.StartsWith("resolution:")) - { - _resolution = line["resolution:".Length..].Trim(); - Console.WriteLine($"Custom Resolution: {_resolution}"); - } - if (line.StartsWith("framerate:")) - { - _framerate = int.Parse(line["framerate:".Length..].Trim()); - Console.WriteLine($"Custom framerate: {_framerate}"); - } - if (line.StartsWith("crf:")) - { - _crf = float.Parse(line["crf:".Length..].Trim()); - Console.WriteLine($"custom crf: {_crf}"); - } - if (line.StartsWith("game_process_name:")) - { - _gameProcessName = line["game_process_name:".Length..].Trim(); - Console.WriteLine($"custom process name: {_gameProcessName}"); - } - } - } - else - { - Console.WriteLine($"The file {filePath} does not exist. Using default values."); - _ffmpegFolderPath = GetDefaultVideosFolderPath(); - } - } - - private static string GetDefaultVideosFolderPath() - { - var userName = Environment.UserName; - return Path.Combine($@"C:\Users\{userName}", "Videos"); - } - - private static async Task TryConnectWebSocket() - { - const int maxRetries = 5; - int attempt = 0; - while (attempt < maxRetries) - { - Console.WriteLine($"Attempt {attempt + 1} of {maxRetries} to connect..."); - bool success = await ConnectWebSocket(); - if (success) break; - attempt++; - if (attempt < maxRetries) - { - Console.WriteLine($"Retrying in 10 seconds... {maxRetries - attempt} attempts remaining."); - await Task.Delay(10000); - } - } - if (attempt == maxRetries) - { - Console.WriteLine("Failed to connect after 5 attempts."); - } - } - - private static async Task ConnectWebSocket() - { - var tickerUri = new Uri($"ws://{WebsocketAddress}:{WebsocketPort}"); - var reconnecting = false; - var lastMessage = string.Empty; - var consecutiveMessageCount = 0; - var isRecording = false; - var currentSongName = string.Empty; - var shouldCheckForMusicSelect = false; - - using var clientWebSocket = new ClientWebSocket(); - try - { - await clientWebSocket.ConnectAsync(tickerUri, CancellationToken.None); - Console.WriteLine("Connected to TickerHook WebSocket."); - } - catch (Exception ex) - { - Console.WriteLine($"Error connecting to TickerHook WebSocket: {ex.Message}"); - return false; - } - - var buffer = new byte[1024]; - while (clientWebSocket.State == WebSocketState.Open) - { - WebSocketReceiveResult result; - try - { - result = await clientWebSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); - } - catch (Exception ex) - { - Console.WriteLine($"Error receiving message: {ex.Message}"); - reconnecting = true; - break; - } - - var message = Encoding.UTF8.GetString(buffer, 0, result.Count).Trim().ToUpper(); - Console.WriteLine($"Received message: {message}"); - - if (message == lastMessage && !message.Contains("SELECT FROM")) - { - consecutiveMessageCount++; + Console.WriteLine($"Found {_gameProcessName}, Attempting connection to TickerHookWS..."); + await TryConnectWebSocket(); } else { - consecutiveMessageCount = 1; - lastMessage = message; - } - - if (consecutiveMessageCount >= 2 && !message.Contains("SELECT FROM") && !isRecording) - { - currentSongName = message; - Console.WriteLine("Starting recording..."); - StartRecording(currentSongName); - isRecording = true; - } - - if (isRecording) - { - if (shouldCheckForMusicSelect && message.Contains("MUSIC SELECT!!")) - { - Console.WriteLine("Stopping recording..."); - StopRecording(currentSongName); - isRecording = false; - shouldCheckForMusicSelect = false; - } - else if (message.EndsWith("CLEAR!") || message.EndsWith("FAILED..")) - { - shouldCheckForMusicSelect = true; - } + Console.WriteLine($"Unable to find {_gameProcessName}. Is the game running and TickerHook enabled?"); } } - return !reconnecting; - } + private static void LoadSettingsFromPropFile() + { + const string filePath = "prop.txt"; + if (File.Exists(filePath)) + { + var fileContent = File.ReadAllText(filePath); + var lines = fileContent.Split('\n'); + foreach (var line in lines) + { + if (line.StartsWith("path:")) + { + var path = line["path:".Length..].Trim(); + if (Directory.Exists(path)) + { + _ffmpegFolderPath = path; // Recording path + } + else + { + Console.WriteLine( + $"The path specified in {filePath} does not exist. Using default recording path."); + _ffmpegFolderPath = GetDefaultVideosFolderPath(); + } + } - private static void StartRecording(string songName) - { - Task.Run(() => StartAudioRecording(songName)); - StartFfmpegRecording(songName); - } + if (line.StartsWith("resolution:")) + { + _resolution = line["resolution:".Length..].Trim(); + Console.WriteLine($"Custom Resolution: {_resolution}"); + } - private static void StartAudioRecording(string songName) - { - try + if (line.StartsWith("framerate:")) + { + _framerate = int.Parse(line["framerate:".Length..].Trim()); + Console.WriteLine($"Custom framerate: {_framerate}"); + } + + if (line.StartsWith("crf:")) + { + _crf = float.Parse(line["crf:".Length..].Trim()); + Console.WriteLine($"Custom crf: {_crf}"); + } + + if (line.StartsWith("game_process_name:")) + { + _gameProcessName = line["game_process_name:".Length..].Trim(); + Console.WriteLine($"Custom process name: {_gameProcessName}"); + } + + if (line.StartsWith("useAsio")) + { + _useAsio = line.Split('=')[1].Trim().ToLower() == "true"; + Console.WriteLine("ASIO Recording is enabled"); + } + } + } + else + { + Console.WriteLine($"The file {filePath} does not exist. Using default values."); + _ffmpegFolderPath = GetDefaultVideosFolderPath(); + } + } + + private static string GetDefaultVideosFolderPath() + { + var userName = Environment.UserName; + return Path.Combine($@"C:\Users\{userName}", "Videos"); + } + + private static async Task TryConnectWebSocket() + { + const int maxRetries = 5; + int attempt = 0; + while (attempt < maxRetries) + { + Console.WriteLine($"Attempt {attempt + 1} of {maxRetries} to connect..."); + bool success = await ConnectWebSocket(); + if (success) break; + attempt++; + if (attempt < maxRetries) + { + Console.WriteLine($"Retrying in 10 seconds... {maxRetries - attempt} attempts remaining."); + await Task.Delay(10000); + } + } + + if (attempt == maxRetries) + { + Console.WriteLine("Failed to connect after 5 attempts."); + } + } + + private static async Task ConnectWebSocket() + { + var tickerUri = new Uri($"ws://{WebsocketAddress}:{WebsocketPort}"); + var reconnecting = false; + var lastMessage = string.Empty; + var consecutiveMessageCount = 0; + var isRecording = false; + var currentSongName = string.Empty; + var shouldCheckForMusicSelect = false; + + using var clientWebSocket = new ClientWebSocket(); + try + { + await clientWebSocket.ConnectAsync(tickerUri, CancellationToken.None); + Console.WriteLine("Connected to TickerHook WebSocket."); + } + catch (Exception ex) + { + Console.WriteLine($"Error connecting to TickerHook WebSocket: {ex.Message}"); + return false; + } + + var buffer = new byte[1024]; + while (clientWebSocket.State == WebSocketState.Open) + { + WebSocketReceiveResult result; + try + { + result = await clientWebSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); + } + catch (Exception ex) + { + Console.WriteLine($"Error receiving message: {ex.Message}"); + reconnecting = true; + break; + } + + var message = Encoding.UTF8.GetString(buffer, 0, result.Count).Trim().ToUpper(); + Console.WriteLine($"Received message: {message}"); + + if (message == lastMessage && !message.Contains("SELECT FROM")) + { + consecutiveMessageCount++; + } + else + { + consecutiveMessageCount = 1; + lastMessage = message; + } + + if (consecutiveMessageCount >= 2 && !message.Contains("SELECT FROM") && !isRecording) + { + currentSongName = message; + Console.WriteLine("Starting recording..."); + StartRecording(currentSongName); + isRecording = true; + } + + if (isRecording) + { + if (shouldCheckForMusicSelect && message.Contains("MUSIC SELECT!!")) + { + Console.WriteLine("Stopping recording..."); + StopRecording(currentSongName); + isRecording = false; + shouldCheckForMusicSelect = false; + } + else if (message.EndsWith("CLEAR!") || message.EndsWith("FAILED..")) + { + shouldCheckForMusicSelect = true; + } + } + } + + return !reconnecting; + } + + private static void StartRecording(string songName) + { + Task.Run(() => StartAudioRecording(songName)); + StartFfmpegRecording(songName); + } + + private static void StartAudioRecording(string songName) + { + if (_useAsio) + { + StartAsioAudioRecording(songName); + } + else + { + StartWasapiAudioRecording(songName); + } + } + + private static void StartWasapiAudioRecording(string songName) + { + try + { + var date = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"); + _audioFilePath = $"{_ffmpegFolderPath}\\{songName}_{date}.wav"; + Directory.CreateDirectory(Path.GetDirectoryName(_audioFilePath)!); + _waveSource = new WasapiLoopbackCapture(); + _writer = new WaveFileWriter(_audioFilePath, _waveSource.WaveFormat); + _waveSource.DataAvailable += (sender, args) => { _writer.Write(args.Buffer, 0, args.BytesRecorded); }; + _waveSource.RecordingStopped += (sender, args) => + { + _writer.Dispose(); + _waveSource.Dispose(); + }; + _waveSource.StartRecording(); + Console.WriteLine("WASAPI Audio recording started."); + } + catch (Exception ex) + { + Console.WriteLine($"Error starting WASAPI audio recording: {ex.Message}"); + } + } + + private static void StartAsioAudioRecording(string songName) + { + try + { + var date = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"); + _audioFilePath = $"{_ffmpegFolderPath}\\{songName}_{date}.wav"; + Directory.CreateDirectory(Path.GetDirectoryName(_audioFilePath)!); + + _asioSource = new AsioOut(0); + _asioSource.InitRecordAndPlayback(null, 2, 48000); + + _writer = new WaveFileWriter(_audioFilePath, new WaveFormat(44100, 16, 2)); + + _asioSource.AudioAvailable += (s, e) => + { + var buffer = new byte[e.SamplesPerBuffer * 4]; + int bufferIndex = 0; + + for (int i = 0; i < e.SamplesPerBuffer; i++) + { + short sampleL = (short)(e.GetAsInterleavedSamples()[i * 2] * short.MaxValue); + short sampleR = (short)(e.GetAsInterleavedSamples()[i * 2 + 1] * short.MaxValue); + + buffer[bufferIndex++] = (byte)(sampleL & 0xFF); + buffer[bufferIndex++] = (byte)((sampleL >> 8) & 0xFF); + buffer[bufferIndex++] = (byte)(sampleR & 0xFF); + buffer[bufferIndex++] = (byte)((sampleR >> 8) & 0xFF); + } + + _writer.Write(buffer, 0, buffer.Length); + }; + + _asioSource.Play(); + Console.WriteLine("ASIO Audio recording started."); + } + catch (Exception ex) + { + Console.WriteLine($"Error starting ASIO audio recording: {ex.Message}"); + } + } + + + private static void StopRecording(string songName) + { + StopAudioRecording(); + StopFfmpegRecording(); + CombineAudioAndVideo(_videoFilePath, _audioFilePath, songName); + } + + private static void StopAudioRecording() + { + if (_useAsio) + { + StopAsioAudioRecording(); + } + else + { + StopWasapiAudioRecording(); + } + } + + private static void StopWasapiAudioRecording() + { + _waveSource?.StopRecording(); + _waveSource = null; + } + + private static void StopAsioAudioRecording() + { + _asioSource?.Stop(); + _asioSource?.Dispose(); + _asioSource = null; + } + + private static void StartFfmpegRecording(string songName) { var date = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"); - _audioFilePath = $"{_ffmpegFolderPath}\\{songName}_{date}.wav"; - Directory.CreateDirectory(Path.GetDirectoryName(_audioFilePath)!); - _waveSource = new WasapiLoopbackCapture(); - _writer = new WaveFileWriter(_audioFilePath, _waveSource.WaveFormat); - _waveSource.DataAvailable += (sender, args) => - { - _writer.Write(args.Buffer, 0, args.BytesRecorded); - }; - _waveSource.RecordingStopped += (sender, args) => - { - _writer.Dispose(); - _waveSource.Dispose(); - }; - _waveSource.StartRecording(); - Console.WriteLine("WASAPI Audio recording started."); - } - catch (Exception ex) - { - Console.WriteLine($"Error starting audio recording: {ex.Message}"); - } - } - - private static void StartFfmpegRecording(string songName) - { - var date = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"); - _videoFilePath = $"{_ffmpegFolderPath}\\{songName}_{date}.mkv"; - var ffmpegArguments = $"-framerate {_framerate} " + - $"-filter_complex \"ddagrab=framerate={_framerate},hwdownload,format=bgra\" " + - $"-c:v libx264 -tune zerolatency -crf {_crf} -video_size {_resolution} -movflags +faststart -y \"{_videoFilePath}\""; - _ffmpegProcess = new Process - { - StartInfo = new ProcessStartInfo + _videoFilePath = $"{_ffmpegFolderPath}\\{songName}_{date}.mkv"; + Directory.CreateDirectory(Path.GetDirectoryName(_videoFilePath)!); + var ffmpegArgs = + $"-f dshow -framerate {_framerate} -i video=\"screen-capture-recorder\" -c:v libx264 -preset ultrafast -crf {_crf} -r {_framerate} -s {_resolution} \"{_videoFilePath}\""; + var startInfo = new ProcessStartInfo { FileName = "ffmpeg", - Arguments = ffmpegArguments, + Arguments = ffmpegArgs, UseShellExecute = false, - RedirectStandardError = true, CreateNoWindow = true + }; + _ffmpegProcess = Process.Start(startInfo); + } + + private static void StopFfmpegRecording() + { + if (_ffmpegProcess != null && !_ffmpegProcess.HasExited) + { + _ffmpegProcess.Kill(); + _ffmpegProcess.Dispose(); + _ffmpegProcess = null; } - }; - _ffmpegProcess.ErrorDataReceived += (_, args) => Console.WriteLine(args.Data); - _ffmpegProcess.Start(); - _ffmpegProcess.BeginErrorReadLine(); - - Console.WriteLine("FFmpeg recording started."); - } - - private static void StopRecording(string songName) - { - StopAudioRecording(); - StopFfmpegRecording(); - CombineAudioAndVideo(_videoFilePath, _audioFilePath, songName); - } - - private static void StopAudioRecording() - { - _waveSource?.StopRecording(); - Console.WriteLine("WASAPI Audio recording stopped."); - } - - private static void StopFfmpegRecording() - { - if (_ffmpegProcess != null && !_ffmpegProcess.HasExited) + } + private static void CombineAudioAndVideo(string videoFilePath, string audioFilePath, string songName) { - _ffmpegProcess.Kill(); - _ffmpegProcess.WaitForExit(); - _ffmpegProcess = null!; - Console.WriteLine("FFmpeg recording stopped."); + var combinedOutputFilePath = $"{_ffmpegFolderPath}\\{songName}_combined_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.mp4"; + var ffmpegArgs = + $"-y -i \"{videoFilePath}\" -i \"{audioFilePath}\" -c:v copy -c:a aac -strict experimental -shortest \"{combinedOutputFilePath}\""; + + var processInfo = new ProcessStartInfo + { + FileName = "ffmpeg", + Arguments = ffmpegArgs, + RedirectStandardOutput = false, + RedirectStandardError = true, + UseShellExecute = false, + CreateNoWindow = true + }; + + using var process = Process.Start(processInfo); + if (process == null) + { + Console.WriteLine("FFmpeg failed to start."); + return; + } + + var error = process.StandardError.ReadToEnd(); + + process.WaitForExit(); + + Console.WriteLine("FFmpeg Error: " + error); + + Console.WriteLine(File.Exists(combinedOutputFilePath) + ? "Audio and video have been successfully combined." + : "Failed to combine audio and video. Check the logs for errors."); + File.Delete(videoFilePath); + File.Delete(audioFilePath); } } - private static void CombineAudioAndVideo(string videoFilePath, string audioFilePath, string songName) - { - var combinedOutputFilePath = $"{_ffmpegFolderPath}\\{songName}_combined_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.mp4"; - var ffmpegArgs = - $"-y -i \"{videoFilePath}\" -i \"{audioFilePath}\" -c:v copy -c:a aac -strict experimental -shortest \"{combinedOutputFilePath}\""; - - var processInfo = new ProcessStartInfo - { - FileName = "ffmpeg", - Arguments = ffmpegArgs, - RedirectStandardOutput = false, - RedirectStandardError = true, - UseShellExecute = false, - CreateNoWindow = true - }; - - using var process = Process.Start(processInfo); - if (process == null) - { - Console.WriteLine("FFmpeg failed to start."); - return; - } - - var error = process.StandardError.ReadToEnd(); - - process.WaitForExit(); - - Console.WriteLine("FFmpeg Error: " + error); - - Console.WriteLine(File.Exists(combinedOutputFilePath) - ? "Audio and video have been successfully combined." - : "Failed to combine audio and video. Check the logs for errors."); - File.Delete(videoFilePath); - File.Delete(audioFilePath); - } -} \ No newline at end of file +} diff --git a/2dxAutoClip/obj/2dxAutoClip.csproj.nuget.dgspec.json b/2dxAutoClip/obj/2dxAutoClip.csproj.nuget.dgspec.json index 5a7b684..160793e 100644 --- a/2dxAutoClip/obj/2dxAutoClip.csproj.nuget.dgspec.json +++ b/2dxAutoClip/obj/2dxAutoClip.csproj.nuget.dgspec.json @@ -1,25 +1,32 @@ { "format": 1, "restore": { - "D:\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj": {} + "E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj": {} }, "projects": { - "D:\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj": { + "E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "D:\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj", + "projectUniqueName": "E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj", "projectName": "2dxAutoClip", - "projectPath": "D:\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj", + "projectPath": "E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj", "packagesPath": "C:\\Users\\Mercury\\.nuget\\packages\\", - "outputPath": "D:\\2dxAutoClip\\2dxAutoClip\\obj\\", + "outputPath": "E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\obj\\", "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], "configFilePaths": [ - "C:\\Users\\Mercury\\AppData\\Roaming\\NuGet\\NuGet.Config" + "C:\\Users\\Mercury\\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\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { @@ -32,11 +39,6 @@ "warnAsError": [ "NU1605" ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" } }, "frameworks": { @@ -68,7 +70,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Users\\Mercury\\.dotnet\\sdk\\8.0.303/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.300/PortableRuntimeIdentifierGraph.json" } } } diff --git a/2dxAutoClip/obj/2dxAutoClip.csproj.nuget.g.props b/2dxAutoClip/obj/2dxAutoClip.csproj.nuget.g.props index 8e6af34..4ceefb3 100644 --- a/2dxAutoClip/obj/2dxAutoClip.csproj.nuget.g.props +++ b/2dxAutoClip/obj/2dxAutoClip.csproj.nuget.g.props @@ -5,11 +5,12 @@ NuGet $(MSBuildThisFileDirectory)project.assets.json $(UserProfile)\.nuget\packages\ - C:\Users\Mercury\.nuget\packages\ + C:\Users\Mercury\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages PackageReference - 6.10.1 + 6.9.1 + \ No newline at end of file diff --git a/2dxAutoClip/obj/project.assets.json b/2dxAutoClip/obj/project.assets.json index 5cb19a2..d2cd0d2 100644 --- a/2dxAutoClip/obj/project.assets.json +++ b/2dxAutoClip/obj/project.assets.json @@ -452,24 +452,32 @@ ] }, "packageFolders": { - "C:\\Users\\Mercury\\.nuget\\packages\\": {} + "C:\\Users\\Mercury\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} }, "project": { "version": "1.0.0", "restore": { - "projectUniqueName": "D:\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj", + "projectUniqueName": "E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj", "projectName": "2dxAutoClip", - "projectPath": "D:\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj", + "projectPath": "E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj", "packagesPath": "C:\\Users\\Mercury\\.nuget\\packages\\", - "outputPath": "D:\\2dxAutoClip\\2dxAutoClip\\obj\\", + "outputPath": "E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\obj\\", "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], "configFilePaths": [ - "C:\\Users\\Mercury\\AppData\\Roaming\\NuGet\\NuGet.Config" + "C:\\Users\\Mercury\\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\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, "https://api.nuget.org/v3/index.json": {} }, "frameworks": { @@ -482,11 +490,6 @@ "warnAsError": [ "NU1605" ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" } }, "frameworks": { @@ -518,7 +521,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Users\\Mercury\\.dotnet\\sdk\\8.0.303/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.300/PortableRuntimeIdentifierGraph.json" } } } diff --git a/2dxAutoClip/obj/project.nuget.cache b/2dxAutoClip/obj/project.nuget.cache index f281f3a..8f7fa63 100644 --- a/2dxAutoClip/obj/project.nuget.cache +++ b/2dxAutoClip/obj/project.nuget.cache @@ -1,8 +1,8 @@ { "version": 2, - "dgSpecHash": "71ChNRMXyyA=", + "dgSpecHash": "xTfdkrpqvxmeY+pzZcnpBIJbSyoO94xa04eSLg8IlKmzbTfi/q7IfP/sLGg2XwIVxlpAVQKwcAeegUkFcOHA5A==", "success": true, - "projectFilePath": "D:\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj", + "projectFilePath": "E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj", "expectedPackageFiles": [ "C:\\Users\\Mercury\\.nuget\\packages\\microsoft.netcore.platforms\\3.1.0\\microsoft.netcore.platforms.3.1.0.nupkg.sha512", "C:\\Users\\Mercury\\.nuget\\packages\\microsoft.win32.registry\\4.7.0\\microsoft.win32.registry.4.7.0.nupkg.sha512", diff --git a/2dxAutoClip/obj/project.packagespec.json b/2dxAutoClip/obj/project.packagespec.json index c1826b6..bdd4b9b 100644 --- a/2dxAutoClip/obj/project.packagespec.json +++ b/2dxAutoClip/obj/project.packagespec.json @@ -1 +1 @@ -"restore":{"projectUniqueName":"D:\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj","projectName":"2dxAutoClip","projectPath":"D:\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj","outputPath":"D:\\2dxAutoClip\\2dxAutoClip\\obj\\","projectStyle":"PackageReference","originalTargetFrameworks":["net8.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"}}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"NAudio":{"target":"Package","version":"[2.2.1, )"},"NAudio.Wasapi":{"target":"Package","version":"[2.2.1, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Users\\Mercury\\.dotnet\\sdk\\8.0.303/PortableRuntimeIdentifierGraph.json"}} \ No newline at end of file +"restore":{"projectUniqueName":"E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj","projectName":"2dxAutoClip","projectPath":"E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\2dxAutoClip.csproj","outputPath":"E:\\csharpcazzo\\2dxAutoClip\\2dxAutoClip\\obj\\","projectStyle":"PackageReference","fallbackFolders":["C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"],"originalTargetFrameworks":["net8.0"],"sources":{"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\":{},"C:\\Program Files\\dotnet\\library-packs":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"NAudio":{"target":"Package","version":"[2.2.1, )"},"NAudio.Wasapi":{"target":"Package","version":"[2.2.1, )"}},"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.300/PortableRuntimeIdentifierGraph.json"}} \ No newline at end of file diff --git a/2dxAutoClip/obj/rider.project.model.nuget.info b/2dxAutoClip/obj/rider.project.model.nuget.info index 9eb219f..fa415f8 100644 --- a/2dxAutoClip/obj/rider.project.model.nuget.info +++ b/2dxAutoClip/obj/rider.project.model.nuget.info @@ -1 +1 @@ -17255542395188510 \ No newline at end of file +17259084205730795 \ No newline at end of file diff --git a/2dxAutoClip/obj/rider.project.restore.info b/2dxAutoClip/obj/rider.project.restore.info index 251b74a..c853cea 100644 --- a/2dxAutoClip/obj/rider.project.restore.info +++ b/2dxAutoClip/obj/rider.project.restore.info @@ -1 +1 @@ -17255543032402240 \ No newline at end of file +17259084285638427 \ No newline at end of file