From c1ad639f7ac63c86196e4a7de7e65fddf9bf39c3 Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Mon, 17 Nov 2025 16:28:22 +0800 Subject: [PATCH] =?UTF-8?q?MAME:DSP=20=E6=8C=87=E9=92=88=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E4=B8=8B=E6=A0=87=E5=86=8D=E6=AC=A1?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E6=8C=87=E9=92=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UniInterface/UniSoundPlayer.cs | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/MameEmulator/UniInterface/UniSoundPlayer.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/MameEmulator/UniInterface/UniSoundPlayer.cs index 52579a62..62f011af 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/MameEmulator/UniInterface/UniSoundPlayer.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/MameEmulator/UniInterface/UniSoundPlayer.cs @@ -100,23 +100,27 @@ public class UniSoundPlayer : MonoBehaviour, ISoundPlayer /*, AxiAudioPull*/ } } - void OnAudioFilterRead(float[] data, int channels) + unsafe void OnAudioFilterRead(float[] data, int channels) { if (!UMAME.bInGame) return; int step = channels; - for (int i = 0; i < data.Length; i += step) + int length = data.Length; + fixed (float* dataptr = &data[0]) { - float rawFloat = lastData; - float rawData; - if (_buffer.TryRead(out rawData)) + float* dataptr_index = &dataptr[0]; + for (int i = 0; i < length; i += step) { - rawFloat = rawData; + float rawFloat = lastData; + float rawData; + if (_buffer.TryRead(out rawData)) + rawFloat = rawData; + for (int fill = 0; fill < step; fill++) + { + *dataptr_index = rawFloat; + dataptr_index++; + } + lastData = rawFloat; } - - data[i] = rawFloat; - for (int fill = 1; fill < step; fill++) - data[i + fill] = rawFloat; - lastData = rawFloat; } }