1
0
forked from akanyan/mu3-mods

feat: implement ExclusiveAudio

This commit is contained in:
2025-01-12 15:31:21 +00:00
parent 31fa3ce028
commit 7900fbbce9
15 changed files with 141 additions and 27 deletions

View File

@ -0,0 +1,27 @@
using System;
namespace MU3.Sound;
class patch_SoundManager: SoundManager {
public class SoundPatch { };
private void setWasapiExclusive() {
using IniFile iniFile = new IniFile("mu3.ini");
var sixCh = iniFile.getValue("Sound", "WasapiExclusive", 1) == 1;
var sampleRate = (uint)iniFile.getValue("Sound", "SampleRate", 48000);
CriAtomUserExtension.WaveFormatExtensible format = default;
format.Format = default;
format.Format.wFormatTag = 65534;
format.Format.nChannels = (ushort)(sixCh ? 6 : 2);
format.Format.nSamplesPerSec = sampleRate;
format.Format.wBitsPerSample = 32;
format.Format.nBlockAlign = (ushort)(format.Format.wBitsPerSample / 8 * format.Format.nChannels);
format.Format.nAvgBytesPerSec = format.Format.nSamplesPerSec * format.Format.nBlockAlign;
format.Format.cbSize = 22;
format.Samples.wValidBitsPerSample = 24;
format.dwChannelMask = sixCh ? 0b111111u : 0b11u;
format.SubFormat = new Guid("00000001-0000-0010-8000-00aa00389b71");
CriAtomUserExtension.SetAudioClientShareMode(CriAtomUserExtension.AudioClientShareMode.Exclusive);
CriAtomUserExtension.SetAudioClientFormat(ref format);
}
}