From 27a82ac451350e359d367272f53134047fbfc08a Mon Sep 17 00:00:00 2001 From: Alex <15199219+muskit@users.noreply.github.com> Date: Sun, 31 Aug 2025 23:36:42 -0700 Subject: [PATCH] add audio export --- src/ExportOperation/Exporter.cs | 17 +++++++++-------- src/UI/Views/Export/Export.axaml.cs | 5 +---- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/ExportOperation/Exporter.cs b/src/ExportOperation/Exporter.cs index 1339b4f..c67032c 100644 --- a/src/ExportOperation/Exporter.cs +++ b/src/ExportOperation/Exporter.cs @@ -1,11 +1,8 @@ using System; using System.Collections.Generic; -using System.Diagnostics.Contracts; using System.IO; -using Avalonia.Data.Converters; +using FFMpegCore; using MercuryConverter.Data; -using MercuryConverter.UI.Views; -using MercuryConverter.Utility; using SaturnData.Notation.Serialization; namespace MercuryConverter.ExportOperation; @@ -54,6 +51,8 @@ public class Exporter /// AUDIO /// var audioKey = ec.Item1.AudioPath; var audioExportFileName = $"{audioKey}.{options.AudioFormat.ToString().ToLower()}"; + var audioExportPath = Path.Combine(exportSongPath, audioExportFileName); + Console.WriteLine(audioExportFileName); if (!finishedAudio.Contains(audioKey) && Database.AudioPaths.ContainsKey(audioKey)) { var audioSourcePath = Database.AudioPaths[audioKey]; @@ -61,12 +60,14 @@ public class Exporter // Copy/convert audio -- TODO switch (options.AudioFormat) { - case AudioFormat.MP3: - break; - case AudioFormat.OGG: + case AudioFormat.WAV: + File.Copy(audioSourcePath, audioExportPath, true); break; default: - File.Copy(audioSourcePath, Path.Combine(exportSongPath, audioExportFileName), true); + FFMpegArguments + .FromFileInput(audioSourcePath) + .OutputToFile(audioExportPath) + .ProcessSynchronously(); break; } finishedAudio.Add(audioKey); diff --git a/src/UI/Views/Export/Export.axaml.cs b/src/UI/Views/Export/Export.axaml.cs index 170f0ec..f2d3233 100644 --- a/src/UI/Views/Export/Export.axaml.cs +++ b/src/UI/Views/Export/Export.axaml.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; -using System.IO; using System.Linq; -using System.Threading; using System.Threading.Tasks; using Avalonia; using Avalonia.Controls; @@ -11,7 +9,6 @@ using Avalonia.Data; using Avalonia.Interactivity; using Avalonia.Media; using Avalonia.Media.Imaging; -using Avalonia.Platform; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; using MercuryConverter.Data; @@ -151,7 +148,7 @@ public partial class Export : Panel int.TryParse(NumThreads.Text, out var thr) && 1 <= thr && thr <= Environment.ProcessorCount ); - var ffmpegAvail = Utils.IsFFMpegAvailable(); + var ffmpegAvail = Utils.FFMpegAvailable; if (!ffmpegAvail) RadioLeaveAudioWAV.IsChecked = true; RadioLeaveAudioWAV.IsEnabled = ffmpegAvail;