mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2026-02-19 23:31:07 +00:00
Expose AudioToolkit in UI
This commit is contained in:
@@ -47,6 +47,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vic", "src
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Video", "src\Ryujinx.Graphics.Video\Ryujinx.Graphics.Video.csproj", "{FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Video", "src\Ryujinx.Graphics.Video\Ryujinx.Graphics.Video.csproj", "{FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.Apple", "src\Ryujinx.Audio.Backends.Apple\Ryujinx.Audio.Backends.Apple.csproj", "{AC26EFF0-8593-4184-9A09-98E37EFFB32E}"
|
||||||
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL3", "src\Ryujinx.Audio.Backends.SDL3\Ryujinx.Audio.Backends.SDL3.csproj", "{988E6191-82E1-4E13-9DDB-CB9FA2FDAF29}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL3", "src\Ryujinx.Audio.Backends.SDL3\Ryujinx.Audio.Backends.SDL3.csproj", "{988E6191-82E1-4E13-9DDB-CB9FA2FDAF29}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.OpenAL", "src\Ryujinx.Audio.Backends.OpenAL\Ryujinx.Audio.Backends.OpenAL.csproj", "{0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.OpenAL", "src\Ryujinx.Audio.Backends.OpenAL\Ryujinx.Audio.Backends.OpenAL.csproj", "{0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}"
|
||||||
@@ -569,6 +571,8 @@ Global
|
|||||||
{D58FA894-27D5-4EAA-9042-AD422AD82931}.Release|x64.Build.0 = Release|Any CPU
|
{D58FA894-27D5-4EAA-9042-AD422AD82931}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{D58FA894-27D5-4EAA-9042-AD422AD82931}.Release|x86.ActiveCfg = Release|Any CPU
|
{D58FA894-27D5-4EAA-9042-AD422AD82931}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{D58FA894-27D5-4EAA-9042-AD422AD82931}.Release|x86.Build.0 = Release|Any CPU
|
{D58FA894-27D5-4EAA-9042-AD422AD82931}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{AC26EFF0-8593-4184-9A09-98E37EFFB32E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{AC26EFF0-8593-4184-9A09-98E37EFFB32E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -4850,6 +4850,31 @@
|
|||||||
"zh_TW": null
|
"zh_TW": null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"ID": "SettingsTabSystemAudioBackendAudioToolbox",
|
||||||
|
"Translations": {
|
||||||
|
"ar_SA": null,
|
||||||
|
"de_DE": null,
|
||||||
|
"el_GR": null,
|
||||||
|
"en_US": "Apple Audio (macOS only)",
|
||||||
|
"es_ES": null,
|
||||||
|
"fr_FR": null,
|
||||||
|
"he_IL": null,
|
||||||
|
"it_IT": null,
|
||||||
|
"ja_JP": null,
|
||||||
|
"ko_KR": null,
|
||||||
|
"no_NO": null,
|
||||||
|
"pl_PL": null,
|
||||||
|
"pt_BR": null,
|
||||||
|
"ru_RU": null,
|
||||||
|
"sv_SE": null,
|
||||||
|
"th_TH": null,
|
||||||
|
"tr_TR": null,
|
||||||
|
"uk_UA": null,
|
||||||
|
"zh_CN": null,
|
||||||
|
"zh_TW": null
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"ID": "SettingsTabSystemHacks",
|
"ID": "SettingsTabSystemHacks",
|
||||||
"Translations": {
|
"Translations": {
|
||||||
|
|||||||
@@ -86,6 +86,8 @@ namespace Ryujinx.Audio.Backends.Apple
|
|||||||
|
|
||||||
private static bool IsSupportedInternal()
|
private static bool IsSupportedInternal()
|
||||||
{
|
{
|
||||||
|
if (!OperatingSystem.IsMacOS()) return false;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var format = GetAudioFormat(SampleFormat.PcmInt16, Constants.TargetSampleRate, 2);
|
var format = GetAudioFormat(SampleFormat.PcmInt16, Constants.TargetSampleRate, 2);
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ namespace Ryujinx.Audio.Backends.Apple
|
|||||||
public override void QueueBuffer(AudioBuffer buffer)
|
public override void QueueBuffer(AudioBuffer buffer)
|
||||||
{
|
{
|
||||||
_ringBuffer.Write(buffer.Data, 0, buffer.Data.Length);
|
_ringBuffer.Write(buffer.Data, 0, buffer.Data.Length);
|
||||||
_queuedBuffers.Enqueue(new AppleAudioBuffer(buffer.HostTag, GetSampleCount(buffer)));
|
_queuedBuffers.Enqueue(new AppleAudioBuffer(buffer.DataPointer, GetSampleCount(buffer)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Start()
|
public override void Start()
|
||||||
@@ -253,7 +253,7 @@ namespace Ryujinx.Audio.Backends.Apple
|
|||||||
if (!_queuedBuffers.TryPeek(out AppleAudioBuffer driverBuffer))
|
if (!_queuedBuffers.TryPeek(out AppleAudioBuffer driverBuffer))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return driverBuffer.DriverIdentifier != buffer.HostTag;
|
return driverBuffer.DriverIdentifier != buffer.DataPointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PrepareToClose() { }
|
public override void PrepareToClose() { }
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -77,12 +77,13 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Ryujinx.Audio.Backends.SDL3\Ryujinx.Audio.Backends.SDL3.csproj" />
|
|
||||||
<ProjectReference Include="..\Ryujinx.Graphics.RenderDocApi\Ryujinx.Graphics.RenderDocApi.csproj" />
|
<ProjectReference Include="..\Ryujinx.Graphics.RenderDocApi\Ryujinx.Graphics.RenderDocApi.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Graphics.Vulkan/Ryujinx.Graphics.Vulkan.csproj" />
|
<ProjectReference Include="..\Ryujinx.Graphics.Vulkan/Ryujinx.Graphics.Vulkan.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Graphics.OpenGL/Ryujinx.Graphics.OpenGL.csproj" />
|
<ProjectReference Include="..\Ryujinx.Graphics.OpenGL/Ryujinx.Graphics.OpenGL.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Input\Ryujinx.Input.csproj" />
|
<ProjectReference Include="..\Ryujinx.Input\Ryujinx.Input.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Input.SDL3\Ryujinx.Input.SDL3.csproj" />
|
<ProjectReference Include="..\Ryujinx.Input.SDL3\Ryujinx.Input.SDL3.csproj" />
|
||||||
|
<ProjectReference Include="..\Ryujinx.Audio.Backends.Apple\Ryujinx.Audio.Backends.Apple.csproj" />
|
||||||
|
<ProjectReference Include="..\Ryujinx.Audio.Backends.SDL3\Ryujinx.Audio.Backends.SDL3.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Audio.Backends.OpenAL\Ryujinx.Audio.Backends.OpenAL.csproj" />
|
<ProjectReference Include="..\Ryujinx.Audio.Backends.OpenAL\Ryujinx.Audio.Backends.OpenAL.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Audio.Backends.SoundIo\Ryujinx.Audio.Backends.SoundIo.csproj" />
|
<ProjectReference Include="..\Ryujinx.Audio.Backends.SoundIo\Ryujinx.Audio.Backends.SoundIo.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Common\Ryujinx.Common.csproj" />
|
<ProjectReference Include="..\Ryujinx.Common\Ryujinx.Common.csproj" />
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using Avalonia.Threading;
|
|||||||
using DiscordRPC;
|
using DiscordRPC;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
using LibHac.Ns;
|
using LibHac.Ns;
|
||||||
|
using Ryujinx.Audio.Backends.Apple;
|
||||||
using Ryujinx.Audio.Backends.Dummy;
|
using Ryujinx.Audio.Backends.Dummy;
|
||||||
using Ryujinx.Audio.Backends.OpenAL;
|
using Ryujinx.Audio.Backends.OpenAL;
|
||||||
using Ryujinx.Audio.Backends.SDL3;
|
using Ryujinx.Audio.Backends.SDL3;
|
||||||
@@ -949,6 +950,9 @@ namespace Ryujinx.Ava.Systems
|
|||||||
AudioBackend.Dummy
|
AudioBackend.Dummy
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if (OperatingSystem.IsMacOS())
|
||||||
|
availableBackends.Insert(0, AudioBackend.AudioToolbox);
|
||||||
|
|
||||||
AudioBackend preferredBackend = ConfigurationState.Instance.System.AudioBackend.Value;
|
AudioBackend preferredBackend = ConfigurationState.Instance.System.AudioBackend.Value;
|
||||||
|
|
||||||
if (preferredBackend is AudioBackend.SDL2)
|
if (preferredBackend is AudioBackend.SDL2)
|
||||||
@@ -985,6 +989,9 @@ namespace Ryujinx.Ava.Systems
|
|||||||
|
|
||||||
deviceDriver = currentBackend switch
|
deviceDriver = currentBackend switch
|
||||||
{
|
{
|
||||||
|
#pragma warning disable CA1416 // Platform compatibility is enforced in AppleHardwareDeviceDriver.IsSupported, before any potentially platform-sensitive code can run.
|
||||||
|
AudioBackend.AudioToolbox => InitializeAudioBackend<AppleHardwareDeviceDriver>(AudioBackend.AudioToolbox, nextBackend),
|
||||||
|
#pragma warning restore CA1416
|
||||||
AudioBackend.SDL3 => InitializeAudioBackend<SDL3HardwareDeviceDriver>(AudioBackend.SDL3, nextBackend),
|
AudioBackend.SDL3 => InitializeAudioBackend<SDL3HardwareDeviceDriver>(AudioBackend.SDL3, nextBackend),
|
||||||
AudioBackend.SoundIo => InitializeAudioBackend<SoundIoHardwareDeviceDriver>(AudioBackend.SoundIo, nextBackend),
|
AudioBackend.SoundIo => InitializeAudioBackend<SoundIoHardwareDeviceDriver>(AudioBackend.SoundIo, nextBackend),
|
||||||
AudioBackend.OpenAl => InitializeAudioBackend<OpenALHardwareDeviceDriver>(AudioBackend.OpenAl, nextBackend),
|
AudioBackend.OpenAl => InitializeAudioBackend<OpenALHardwareDeviceDriver>(AudioBackend.OpenAl, nextBackend),
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ namespace Ryujinx.Ava.Systems.Configuration
|
|||||||
OpenAl,
|
OpenAl,
|
||||||
SoundIo,
|
SoundIo,
|
||||||
SDL3,
|
SDL3,
|
||||||
|
AudioToolbox,
|
||||||
SDL2 = SDL3
|
SDL2 = SDL3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using Avalonia.Threading;
|
|||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
using LibHac.Tools.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
|
using Ryujinx.Audio.Backends.Apple;
|
||||||
using Ryujinx.Audio.Backends.OpenAL;
|
using Ryujinx.Audio.Backends.OpenAL;
|
||||||
using Ryujinx.Audio.Backends.SDL3;
|
using Ryujinx.Audio.Backends.SDL3;
|
||||||
using Ryujinx.Audio.Backends.SoundIo;
|
using Ryujinx.Audio.Backends.SoundIo;
|
||||||
@@ -277,6 +278,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
public bool IsOpenAlEnabled { get; set; }
|
public bool IsOpenAlEnabled { get; set; }
|
||||||
public bool IsSoundIoEnabled { get; set; }
|
public bool IsSoundIoEnabled { get; set; }
|
||||||
public bool IsSDL3Enabled { get; set; }
|
public bool IsSDL3Enabled { get; set; }
|
||||||
|
public bool IsAudioToolboxEnabled { get; set; }
|
||||||
public bool IsCustomResolutionScaleActive => _resolutionScale == 4;
|
public bool IsCustomResolutionScaleActive => _resolutionScale == 4;
|
||||||
public bool IsScalingFilterActive => _scalingFilter == (int)Ryujinx.Common.Configuration.ScalingFilter.Fsr;
|
public bool IsScalingFilterActive => _scalingFilter == (int)Ryujinx.Common.Configuration.ScalingFilter.Fsr;
|
||||||
|
|
||||||
@@ -524,12 +526,14 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
IsOpenAlEnabled = OpenALHardwareDeviceDriver.IsSupported;
|
IsOpenAlEnabled = OpenALHardwareDeviceDriver.IsSupported;
|
||||||
IsSoundIoEnabled = SoundIoHardwareDeviceDriver.IsSupported;
|
IsSoundIoEnabled = SoundIoHardwareDeviceDriver.IsSupported;
|
||||||
IsSDL3Enabled = SDL3HardwareDeviceDriver.IsSupported;
|
IsSDL3Enabled = SDL3HardwareDeviceDriver.IsSupported;
|
||||||
|
IsAudioToolboxEnabled = OperatingSystem.IsMacOS() && AppleHardwareDeviceDriver.IsSupported;
|
||||||
|
|
||||||
await Dispatcher.UIThread.InvokeAsync(() =>
|
await Dispatcher.UIThread.InvokeAsync(() =>
|
||||||
{
|
{
|
||||||
OnPropertyChanged(nameof(IsOpenAlEnabled));
|
OnPropertyChanged(nameof(IsOpenAlEnabled));
|
||||||
OnPropertyChanged(nameof(IsSoundIoEnabled));
|
OnPropertyChanged(nameof(IsSoundIoEnabled));
|
||||||
OnPropertyChanged(nameof(IsSDL3Enabled));
|
OnPropertyChanged(nameof(IsSDL3Enabled));
|
||||||
|
OnPropertyChanged(nameof(IsAudioToolboxEnabled));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,9 @@
|
|||||||
<ComboBoxItem
|
<ComboBoxItem
|
||||||
IsEnabled="{Binding IsSDL3Enabled}"
|
IsEnabled="{Binding IsSDL3Enabled}"
|
||||||
Content="{ext:Locale SettingsTabSystemAudioBackendSDL3}" />
|
Content="{ext:Locale SettingsTabSystemAudioBackendSDL3}" />
|
||||||
|
<ComboBoxItem
|
||||||
|
IsEnabled="{Binding IsAudioToolboxEnabled}"
|
||||||
|
Content="{ext:Locale SettingsTabSystemAudioBackendAudioToolbox}" />
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
<StackPanel Margin="10,0,0,0" Orientation="Horizontal">
|
||||||
|
|||||||
Reference in New Issue
Block a user