Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
250854c
feat: add hitsound visualizer
maotovisk Feb 24, 2026
e05a0ab
feat(hs_visualizer): implement new timeline view
maotovisk Feb 25, 2026
9d18fe2
feat: add ManagedBass playback service and playback runner for audio …
maotovisk Feb 25, 2026
ec6d3c0
feat(hitsound): refactor playback handling and improve timing debug i…
maotovisk Feb 25, 2026
55046e7
feat(audio): add audio output device selection and update volume sett…
maotovisk Feb 25, 2026
3917565
feat(hs_visualizer): optimize sample change handling and improve cach…
maotovisk Feb 25, 2026
7457d89
feat(hs_visualizer): enhance timeline interaction with sample change …
maotovisk Feb 25, 2026
7b1e1b3
feat(hs_visualizer): refine tick rendering logic for improved density…
maotovisk Feb 25, 2026
297322c
feat(hs_visualizer): enhance sample handling and visual representatio…
maotovisk Feb 26, 2026
169a82e
fix(hs_visualizer): update row height
maotovisk Feb 28, 2026
d37a137
chore: remove dotsettings.user
maotovisk Feb 28, 2026
edbddbd
Merge branch 'main' into prototype/hitsound-visualizer
maotovisk Feb 28, 2026
b4a88b6
feat: better dropdown
maotovisk Feb 28, 2026
fc85b48
Merge branch 'main' into prototype/hitsound-visualizer
maotovisk Feb 28, 2026
3cf6890
feat: add undo/redo functionality
maotovisk Feb 28, 2026
6b30b69
feat: better audio playback and volume controls
maotovisk Feb 28, 2026
080ff81
feat: better playback cursor seeking and tick visualization
maotovisk Feb 28, 2026
e8de177
feat: fix audio stuff, add sample index and volume overrides to HitSo…
maotovisk Feb 28, 2026
985fe8c
feat: fix sample index and volume override normalization
maotovisk Feb 28, 2026
bc4037f
feat: update playback buttons
maotovisk Feb 28, 2026
309a18b
feat: better hitsound playback and improve playback buffer settings
maotovisk Feb 28, 2026
61fc81d
refactor: simplify managed BASS playback logic and remove unused sett…
maotovisk Feb 28, 2026
0cc7cfb
refactor: reorganize namespaces for services
maotovisk Feb 28, 2026
6a0cc1e
fix: use AsSpan instead of substring
maotovisk Mar 2, 2026
77d1ea9
Merge branch 'main' into prototype/hitsound-visualizer
maotovisk Mar 3, 2026
5e344ca
feat(hitsound_visualizer): add support for destination beatmap select…
maotovisk Mar 3, 2026
4ca2c4f
fix: seeking backwards with scrolling
maotovisk Mar 3, 2026
1c930cf
feat(hitsound_visualizer): add mouse wheel volume adjustment for song…
maotovisk Mar 3, 2026
ca90951
feat(hitsound_visualizer): better hitsound parsing and selection mech…
maotovisk Mar 3, 2026
aec432b
fix(beatmap_selection_panel): remove potential memleak
maotovisk Mar 3, 2026
66d2269
feat(song_library): add library reload functionality and cache invali…
maotovisk Mar 3, 2026
5977b3c
chore(dependencies): update package versions including `MapWizard.Bea…
maotovisk Mar 3, 2026
f39d843
fix: bounds clicks on the timeline to external element in order to ge…
maotovisk Mar 3, 2026
5474c78
feat(logging): introduce `MapWizardLogger` for exception logging with…
maotovisk Mar 4, 2026
35eb242
chore(logging): integrate `MapWizardLogger` exception logging into va…
maotovisk Mar 4, 2026
aeda829
chore(logging): refine `MapWizardLogger` usage and clean up redundant…
maotovisk Mar 4, 2026
10183b0
chore(hitsound_service): add tolerance constants for snap tick genera…
maotovisk Mar 4, 2026
29231df
chore(song_library): enhance cache invalidation to handle concurrent …
maotovisk Mar 4, 2026
3f13e13
feat(settings): add support for toggling HitSound Visualizer feature …
maotovisk Mar 4, 2026
c47aaf7
feat(beatmap_selection): add a way to quick change the selected diff …
maotovisk Mar 4, 2026
183cc32
feat(hitsound_visualizer): improve playback position preservation and…
maotovisk Mar 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ output.osu
.idea
.vscode
.dotnet-home/
/MapWizard.sln.DotSettings.user
2 changes: 1 addition & 1 deletion MapWizard.CLI/MapWizard.CLI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="MapWizard.BeatmapParser" Version="1.0.3" />
<PackageReference Include="MapWizard.BeatmapParser" Version="1.0.5" />
</ItemGroup>

<PropertyGroup>
Expand Down
7 changes: 4 additions & 3 deletions MapWizard.CLI/ParserCompliancy/Decoding.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@ public static void DecodeAllMapsFrom(string folderPath)
ConsoleUtils.ProgressBar.DrawProgressBar(osuFiles.Length, parsedBeatmaps.Count);
parsedBeatmaps.Add(Beatmap.Decode(new FileInfo(osuFile)));
}
catch (Exception e)
catch (Exception ex)
{
parsingErrors.Add((osuFile, e));
MapWizard.Tools.HelperExtensions.MapWizardLogger.LogException(ex);
parsingErrors.Add((osuFile, ex));
}
}

Expand All @@ -50,4 +51,4 @@ public static void DecodeAllMapsFrom(string folderPath)
Console.WriteLine("Errors file written");
}
}
}
}
1 change: 1 addition & 0 deletions MapWizard.CLI/ParserCompliancy/Encoding.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public static void EncodeAllMapsFrom(string folderPath)
}
catch (Exception ex)
{
MapWizard.Tools.HelperExtensions.MapWizardLogger.LogException(ex);
Console.WriteLine($"Errors when processing {osuFile}: {ex}");
}
}
Expand Down
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added MapWizard.Desktop/Assets/Skins/Legacy/count.wav
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added MapWizard.Desktop/Assets/Skins/Legacy/go@2x.png
Binary file added MapWizard.Desktop/Assets/Skins/Legacy/hit0@2x.png
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added MapWizard.Desktop/Assets/Skins/Legacy/star@2x.png
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
3 changes: 2 additions & 1 deletion MapWizard.Desktop/Converters/ColorToHexConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,9 @@ public object ConvertBack(object? value, Type targetType, object? parameter, Cul
{
return ColorTranslator.FromHtml(hex); // Convert HTML color string to Color
}
catch
catch (Exception ex)
{
MapWizard.Tools.HelperExtensions.MapWizardLogger.LogException(ex);
return Color.Black; // Default if parsing fails
}
}
Expand Down
6 changes: 4 additions & 2 deletions MapWizard.Desktop/Converters/MapPathSummaryConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@ public object Convert(object? value, Type targetType, object? parameter, Culture
{
fileName = Path.GetFileNameWithoutExtension(rawPath);
}
catch
catch (Exception ex)
{
MapWizard.Tools.HelperExtensions.MapWizardLogger.LogException(ex);
fileName = rawPath;
}

Expand Down Expand Up @@ -82,8 +83,9 @@ private static bool IsValidOsuMapPath(string path)

return File.Exists(Path.GetFullPath(path));
}
catch
catch (Exception ex)
{
MapWizard.Tools.HelperExtensions.MapWizardLogger.LogException(ex);
return false;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
using System;
using Avalonia.Controls;
using MapWizard.Desktop.Services;
using MapWizard.Desktop.Services.ComboColourService;
using MapWizard.Desktop.Services.HitsoundService;
using MapWizard.Desktop.Services.MapCleanerService;
using MapWizard.Desktop.Services.MemoryService;
using MapWizard.Desktop.Services.MetadataService;
using MapWizard.Desktop.Services.Playback;
using MapWizard.Desktop.ViewModels;
using MapWizard.Desktop.Views;
using Microsoft.Extensions.DependencyInjection;
using SukiUI.Dialogs;
using SukiUI.Toasts;
using ComboColourStudioView = MapWizard.Desktop.Views.ComboColourStudio.ComboColourStudioView;
using HitSoundVisualizerView = MapWizard.Desktop.Views.HitSoundVisualizer.HitSoundVisualizerView;
using MapCleanerView = MapWizard.Desktop.Views.MapCleaner.MapCleanerView;
using MetadataManagerView = MapWizard.Desktop.Views.MetadataManager.MetadataManagerView;
using SettingsView = MapWizard.Desktop.Views.Settings.SettingsView;
using WelcomePageView = MapWizard.Desktop.Views.WelcomePage.WelcomePageView;

namespace MapWizard.Desktop.DependencyInjection;

Expand All @@ -15,6 +27,7 @@ public static void AddCommonServices(this IServiceCollection collection)
{
// ViewModels
collection.AddTransient<HitSoundCopierViewModel>();
collection.AddTransient<HitSoundVisualizerViewModel>();
collection.AddTransient<MetadataManagerViewModel>();
collection.AddTransient<ComboColourStudioViewModel>();
collection.AddTransient<MapCleanerViewModel>();
Expand All @@ -24,6 +37,7 @@ public static void AddCommonServices(this IServiceCollection collection)

// Views
collection.AddTransient<HitSoundCopierView>();
collection.AddTransient<HitSoundVisualizerView>();
collection.AddTransient<MetadataManagerView>();
collection.AddTransient<ComboColourStudioView>();
collection.AddTransient<MapCleanerView>();
Expand All @@ -42,6 +56,7 @@ public static void AddCommonServices(this IServiceCollection collection)
collection.AddScoped<IHitSoundService, HitSoundService>();
collection.AddScoped<IComboColourStudioService, ComboColourStudioService>();
collection.AddScoped<IMapCleanerService, MapCleanerService>();
collection.AddSingleton<IAudioPlaybackService, ManagedBassPlaybackService>();
collection.AddSingleton<IComboColourProjectStore, ComboColourProjectStore>();
collection.AddScoped<IOsuMemoryReaderService, OsuMemoryReaderService>();
collection.AddSingleton<ISongLibraryService, SongLibraryService>();
Expand Down
1 change: 1 addition & 0 deletions MapWizard.Desktop/Enums/NavigationPage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ public enum NavigationPage
{
Welcome,
HitSoundCopier,
HitSoundVisualizer,
MetadataManager,
ComboColourStudio,
MapCleaner,
Expand Down
2 changes: 2 additions & 0 deletions MapWizard.Desktop/Enums/ResultStatus.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
namespace MapWizard.Desktop.Enums;

public enum ResultStatus
{
Success,
Expand Down
19 changes: 16 additions & 3 deletions MapWizard.Desktop/MapWizard.Desktop.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.3.9" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageReference Include="DialogHost.Avalonia" Version="0.10.4" />
<PackageReference Include="MapWizard.BeatmapParser" Version="1.0.3" />
<PackageReference Include="Material.Icons.Avalonia" Version="2.4.1" />
<PackageReference Include="JAJ.Packages.MiniAudioEx" Version="3.0.0" />
<PackageReference Include="ManagedBass" Version="4.0.2" />
<PackageReference Include="MapWizard.BeatmapParser" Version="1.0.5" />
<PackageReference Include="Material.Icons.Avalonia" Version="3.0.0" />
<PackageReference Include="MessageBox.Avalonia" Version="3.3.1.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.3" />
<PackageReference Include="OsuMemoryDataProvider" Version="0.11.1" />
Expand All @@ -38,9 +40,20 @@
</ItemGroup>

<ItemGroup>
<Folder Include="Assets\" />
<None Include="Assets\Skins\Legacy\**\*" CopyToOutputDirectory="PreserveNewest" />
<AvaloniaResource Include="Assets\app-icon.ico" />
<AvaloniaResource Include="Assets\app-icon.png" />
<AvaloniaResource Include="Assets\app-icon.svg" />
</ItemGroup>

<ItemGroup>
<Folder Include="Assets\Skins\Legacy\" />
</ItemGroup>

<ItemGroup>
<None Include="Native\Bass\linux-x64\libbass.so" Link="libbass.so" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
<None Include="Native\Bass\win-x64\bass.dll" Link="bass.dll" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
<None Include="Native\Bass\osx\libbass.dylib" Link="libbass.dylib" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
<None Include="Native\Bass\BASS-LICENSE.txt" Link="BASS-LICENSE.txt" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
Comment thread
maotovisk marked this conversation as resolved.
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace MapWizard.Desktop.Models.HitSoundVisualizer;

public class HitSoundTimelineContextRequest
{
public int TimeMs { get; set; }
public int PointId { get; set; } = -1;
public int? SampleChangeTimeMs { get; set; }
public bool IsSampleRow { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace MapWizard.Desktop.Models.HitSoundVisualizer;

public class HitSoundTimelineRowAddRequest
{
public int TimeMs { get; set; }
public int RowIndex { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace MapWizard.Desktop.Models.HitSoundVisualizer;

public class HitSoundTimelineZoomRequest
{
public int AnchorTimeMs { get; set; }
public double ZoomFactor { get; set; } = 1d;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System.Collections.Generic;
using MapWizard.Tools.HitSounds.Timeline;

namespace MapWizard.Desktop.Models.HitSoundVisualizer;

public class HitSoundVisualizerDocument
{
public string BeatmapPath { get; set; } = string.Empty;
public string MapsetDirectoryPath { get; set; } = string.Empty;
public string AudioFilePath { get; set; } = string.Empty;
public string DisplayTitle { get; set; } = string.Empty;
public double EndTimeMs { get; set; }

// Export-compatible working structure used by the hitsound copier.
public HitSoundTimeline Timeline { get; set; } = new();

public IReadOnlyList<HitSoundVisualizerPoint> Points { get; set; } = [];
public IReadOnlyList<HitSoundVisualizerSampleChange> SampleChanges { get; set; } = [];
public IReadOnlyList<HitSoundVisualizerSnapTick> SnapTicks { get; set; } = [];
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using BeatmapParser.Enums;

namespace MapWizard.Desktop.Models.HitSoundVisualizer;

public class HitSoundVisualizerPoint
{
public int Id { get; set; }
public int TimeMs { get; set; }
public SampleSet SampleSet { get; set; } = SampleSet.Normal;
public int? SampleIndexOverride { get; set; }
public int? SampleVolumeOverridePercent { get; set; }
public bool IsAutoSampleSet { get; set; }
public HitSound HitSound { get; set; } = HitSound.Normal;
public bool IsDraggable { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using BeatmapParser.Enums;

namespace MapWizard.Desktop.Models.HitSoundVisualizer;

public class HitSoundVisualizerSampleChange
{
public int TimeMs { get; set; }
public SampleSet SampleSet { get; set; } = SampleSet.Normal;
public int Index { get; set; }
public int Volume { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace MapWizard.Desktop.Models.HitSoundVisualizer;

public class HitSoundVisualizerSnapTick
{
public int TimeMs { get; set; }
public double ExactTimeMs { get; set; }
public string Label { get; set; } = string.Empty;
public int Strength { get; set; }
public int Denominator { get; set; }
public bool IsMeasureLine { get; set; }
}
27 changes: 23 additions & 4 deletions MapWizard.Desktop/Models/MapsetDifficultyCard.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,29 @@ public partial class MapsetDifficultyCard(string path) : ObservableObject
{
[ObservableProperty] private bool _isSelected;

public SelectedMap Beatmap { get; } = new()
public string Path { get; } = path;
public string DifficultyLabel { get; } = ResolveDifficultyLabel(path);

private static string ResolveDifficultyLabel(string beatmapPath)
{
Path = path
};
if (string.IsNullOrWhiteSpace(beatmapPath))
{
return "Unknown Difficulty";
}

var fileName = System.IO.Path.GetFileNameWithoutExtension(beatmapPath);
if (string.IsNullOrWhiteSpace(fileName))
{
return "Unknown Difficulty";
}

var openBracketIndex = fileName.LastIndexOf('[');
var closeBracketIndex = fileName.LastIndexOf(']');
if (openBracketIndex >= 0 && closeBracketIndex > openBracketIndex)
{
return fileName.Substring(openBracketIndex, closeBracketIndex - openBracketIndex + 1);
}

public string Path => Beatmap.Path;
return fileName;
}
}
2 changes: 2 additions & 0 deletions MapWizard.Desktop/Models/Result.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using MapWizard.Desktop.Enums;

namespace MapWizard.Desktop.Models;

public class Result<T>
Expand Down
6 changes: 4 additions & 2 deletions MapWizard.Desktop/Models/SelectedMap.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,9 @@ private void LoadBeatmapCardData()
var resolvedBackgroundPath = MapsetAssetPathUtils.ResolveRelativePathFromBeatmap(fullPath, backgroundRelativePath);
LoadBackgroundImage(resolvedBackgroundPath);
}
catch
catch (Exception ex)
{
MapWizard.Tools.HelperExtensions.MapWizardLogger.LogException(ex);
ApplyFallbackCardData(normalizedPath);
}
}
Expand Down Expand Up @@ -128,8 +129,9 @@ private void LoadBackgroundImage(string? backgroundPath)
var fullPath = System.IO.Path.GetFullPath(backgroundPath);
BackgroundImage = File.Exists(fullPath) ? new Bitmap(fullPath) : null;
}
catch
catch (Exception ex)
{
MapWizard.Tools.HelperExtensions.MapWizardLogger.LogException(ex);
BackgroundImage = null;
}
}
Expand Down
22 changes: 22 additions & 0 deletions MapWizard.Desktop/Models/Settings/AudioOutputDeviceOption.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
namespace MapWizard.Desktop.Models.Settings;

public sealed class AudioOutputDeviceOption
{
public AudioOutputDeviceOption(string id, string displayName, bool isDefault, bool isEnabled)
{
Id = id;
DisplayName = displayName;
IsDefault = isDefault;
IsEnabled = isEnabled;
}

public string Id { get; }

public string DisplayName { get; }

public bool IsDefault { get; }

public bool IsEnabled { get; }

public override string ToString() => DisplayName;
}
12 changes: 12 additions & 0 deletions MapWizard.Desktop/Models/Settings/MainSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,16 @@ public class MainSettings

[Setting("General", "UpdateStream")]
public UpdateStream UpdateStream { get; set; } = UpdateStream.Release;

[Setting("General", "EnableHitSoundVisualizer")]
public bool EnableHitSoundVisualizer { get; set; } = false;

[Setting("Audio", "PreviewSongVolumePercent")]
public int AudioPreviewSongVolumePercent { get; set; } = 80;

[Setting("Audio", "PreviewHitSoundVolumePercent")]
public int AudioPreviewHitSoundVolumePercent { get; set; } = 100;

[Setting("Audio", "OutputDeviceId")]
public string AudioOutputDeviceId { get; set; } = "default";
}
Loading