From 113ea59fe9d4dc48f4811a4f516aeed17f68d7c7 Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Tue, 18 Feb 2025 17:44:30 +0800 Subject: [PATCH] fixed audio --- Assets/Scripts/UEssgee.cs | 4 +- .../UEssgeeInterface/UEGSoundPlayer.cs | 76 ++++++++----------- 2 files changed, 35 insertions(+), 45 deletions(-) diff --git a/Assets/Scripts/UEssgee.cs b/Assets/Scripts/UEssgee.cs index 778931d..d7ee5ac 100644 --- a/Assets/Scripts/UEssgee.cs +++ b/Assets/Scripts/UEssgee.cs @@ -44,9 +44,9 @@ public class Essgeeinit : MonoBehaviour uegResources = new UEGResources(); uegLog = new UEGLog(); InitAll(uegResources, Application.persistentDataPath); - //LoadAndRunCartridge("G:/psjapa.sms"); + LoadAndRunCartridge("G:/psjapa.sms"); //LoadAndRunCartridge("G:/Ninja_Gaiden_(UE)_type_A_[!].sms"); - LoadAndRunCartridge("G:/SML2.gb"); + //LoadAndRunCartridge("G:/SML2.gb"); } void OnDisable() diff --git a/Assets/Scripts/UEssgeeInterface/UEGSoundPlayer.cs b/Assets/Scripts/UEssgeeInterface/UEGSoundPlayer.cs index 9909c28..0b549ed 100644 --- a/Assets/Scripts/UEssgeeInterface/UEGSoundPlayer.cs +++ b/Assets/Scripts/UEssgeeInterface/UEGSoundPlayer.cs @@ -9,7 +9,7 @@ public class UEGSoundPlayer : MonoBehaviour//, ISoundPlayer { [SerializeField] private AudioSource m_as; - private RingBuffer _buffer = new RingBuffer(44100*2); + private RingBuffer _buffer = new RingBuffer(44100 * 2); private TimeSpan lastElapsed; public double audioFPS { get; private set; } public bool IsRecording { get; private set; } @@ -20,37 +20,45 @@ public class UEGSoundPlayer : MonoBehaviour//, ISoundPlayer private int writePos = 0; private float[] buffer; - void Start() + void Awake() { + // 获取当前音频配置 + AudioConfiguration config = AudioSettings.GetConfiguration(); + + // 设置目标音频配置 + config.sampleRate = 44100; // 采样率为 44100Hz + config.numRealVoices = 32; // 设置最大音频源数量(可选) + config.numVirtualVoices = 512; // 设置虚拟音频源数量(可选) + config.dspBufferSize = 1024; // 设置 DSP 缓冲区大小(可选) + config.speakerMode = AudioSpeakerMode.Stereo; // 设置为立体声(2 声道) + + // 应用新的音频配置 + if (AudioSettings.Reset(config)) + { + Debug.Log("Audio settings updated successfully."); + Debug.Log("Sample Rate: " + config.sampleRate + "Hz"); + Debug.Log("Speaker Mode: " + config.speakerMode); + } + else + { + Debug.LogError("Failed to update audio settings."); + } + GetComponent().PlayOneShot(audioClip); } private Queue sampleQueue = new Queue(); - // 外部填充数据 - public void AddData(float[] data) - { - lock (sampleQueue) - { - foreach (var sample in data) - { - sampleQueue.Enqueue(sample); - } - } - } // Unity 音频线程回调 void OnAudioFilterRead(float[] data, int channels) { - lock (sampleQueue) + for (int i = 0; i < data.Length; i++) { - for (int i = 0; i < data.Length; i++) - { - if (sampleQueue.Count > 0) - data[i] = sampleQueue.Dequeue(); - else - data[i] = 0; // 无数据时静音 - } + if (_buffer.TryRead(out float rawData)) + data[i] = rawData; + else + data[i] = 0; // 无数据时静音 } } @@ -78,30 +86,12 @@ public class UEGSoundPlayer : MonoBehaviour//, ISoundPlayer lastElapsed = current; audioFPS = 1d / delta.TotalSeconds; - //for (int i = 0; i < samples_a; i += 1) - //{ - // //_buffer.Write(((i % 2 == 0)?-1:1) * buffer[i] / 32767.0f); - // _buffer.Write(buffer[i] / 32767.0f); - - //} - - AddData(ConvertShortToFloat(buffer, samples_a)); - - if (IsRecording) + for (int i = 0; i < samples_a; i += 1) { - dataChunk.AddSampleData(buffer, samples_a); - waveHeader.FileLength += (uint)samples_a; + _buffer.Write(buffer[i] / 32767.0f); + } } - unsafe float[] ConvertShortToFloat(short* input,int length) - { - float[] output = new float[length]; - for (int i = 0; i < length; i++) - { - output[i] = input[i] / 32768.0f; - } - return output; - } public void BufferWirte(int Off, byte[] Data) { } @@ -312,7 +302,7 @@ public class UEGSoundPlayer : MonoBehaviour//, ISoundPlayer ChunkSize += (uint)(stereoBuffer.Length * 2); } - public unsafe void AddSampleData(short* stereoBuffer,int lenght) + public unsafe void AddSampleData(short* stereoBuffer, int lenght) { for (int i = 0; i < lenght; i++) {