diff --git a/Assets/Resources/AudioData/MusicSegment.bytes b/Assets/Resources/AudioData/MusicSegment.bytes index a00a00c..8eb793f 100644 Binary files a/Assets/Resources/AudioData/MusicSegment.bytes and b/Assets/Resources/AudioData/MusicSegment.bytes differ diff --git a/Assets/Resources/AudioData/MusicTransition.bytes b/Assets/Resources/AudioData/MusicTransition.bytes index c711ef8..76e3f29 100644 Binary files a/Assets/Resources/AudioData/MusicTransition.bytes and b/Assets/Resources/AudioData/MusicTransition.bytes differ diff --git a/Assets/Resources/Audios/Japanese Number 02.wav.meta b/Assets/Resources/Audios/Japanese Number 02.wav.meta index 6564a8f..ab83668 100644 --- a/Assets/Resources/Audios/Japanese Number 02.wav.meta +++ b/Assets/Resources/Audios/Japanese Number 02.wav.meta @@ -11,7 +11,7 @@ AudioImporter: compressionFormat: 1 quality: 0.5 conversionMode: 0 - preloadAudioData: 1 + preloadAudioData: 0 platformSettingOverrides: {} forceToMono: 0 normalize: 1 diff --git a/Assets/Resources/Audios/Spanish Number 03.wav.meta b/Assets/Resources/Audios/Spanish Number 03.wav.meta index 5cb0a34..810c081 100644 --- a/Assets/Resources/Audios/Spanish Number 03.wav.meta +++ b/Assets/Resources/Audios/Spanish Number 03.wav.meta @@ -11,7 +11,7 @@ AudioImporter: compressionFormat: 1 quality: 0.5 conversionMode: 0 - preloadAudioData: 1 + preloadAudioData: 0 platformSettingOverrides: {} forceToMono: 0 normalize: 1 diff --git a/Assets/Resources/Audios/au_music_game_loop.wav b/Assets/Resources/Audios/au_music_game_loop.wav new file mode 100644 index 0000000..66e9db6 --- /dev/null +++ b/Assets/Resources/Audios/au_music_game_loop.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d9da778f85a56be411e52da4e39710f9b1adb35c3da7b778fe9f9739c04c285 +size 11219946 diff --git a/Assets/Resources/Audios/music_game_loop.wav.meta b/Assets/Resources/Audios/au_music_game_loop.wav.meta similarity index 83% rename from Assets/Resources/Audios/music_game_loop.wav.meta rename to Assets/Resources/Audios/au_music_game_loop.wav.meta index 5fb423f..00b46b3 100644 --- a/Assets/Resources/Audios/music_game_loop.wav.meta +++ b/Assets/Resources/Audios/au_music_game_loop.wav.meta @@ -1,17 +1,17 @@ fileFormatVersion: 2 -guid: c084ace48a6004923bb9d762a2a31908 +guid: 8b55a0f62ff1a4f6cb7e68410bc51eac AudioImporter: externalObjects: {} serializedVersion: 7 defaultSettings: serializedVersion: 2 - loadType: 0 + loadType: 2 sampleRateSetting: 2 sampleRateOverride: 44100 compressionFormat: 1 quality: 0.13 conversionMode: 0 - preloadAudioData: 0 + preloadAudioData: 1 platformSettingOverrides: {} forceToMono: 0 normalize: 1 diff --git a/Assets/Resources/Audios/au_music_home_loop.wav b/Assets/Resources/Audios/au_music_home_loop.wav new file mode 100644 index 0000000..8e92546 --- /dev/null +++ b/Assets/Resources/Audios/au_music_home_loop.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc9f444c33a33807d3ca3bff1b871729d74d70f1abbb6f6dca16eb60acf4b7e6 +size 11219946 diff --git a/Assets/Resources/Audios/music_home_loop.wav.meta b/Assets/Resources/Audios/au_music_home_loop.wav.meta similarity index 83% rename from Assets/Resources/Audios/music_home_loop.wav.meta rename to Assets/Resources/Audios/au_music_home_loop.wav.meta index 41aba6f..a809dde 100644 --- a/Assets/Resources/Audios/music_home_loop.wav.meta +++ b/Assets/Resources/Audios/au_music_home_loop.wav.meta @@ -1,17 +1,17 @@ fileFormatVersion: 2 -guid: 6f16847f355c146d4a93c6199bae1e22 +guid: e7261e35dead34c2493620079319c598 AudioImporter: externalObjects: {} serializedVersion: 7 defaultSettings: serializedVersion: 2 - loadType: 0 + loadType: 2 sampleRateSetting: 2 sampleRateOverride: 44100 compressionFormat: 1 quality: 0.13 conversionMode: 0 - preloadAudioData: 0 + preloadAudioData: 1 platformSettingOverrides: {} forceToMono: 0 normalize: 1 diff --git a/Assets/Resources/Audios/music_game_loop.wav b/Assets/Resources/Audios/music_game_loop.wav deleted file mode 100644 index 281b538..0000000 --- a/Assets/Resources/Audios/music_game_loop.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4eb3f8abc9a4e6ffd82e4da84b9581d076d2538818b54bf4bd7104cd7e6318af -size 11081544 diff --git a/Assets/Resources/Audios/music_home_loop.wav b/Assets/Resources/Audios/music_home_loop.wav deleted file mode 100644 index 2b07758..0000000 --- a/Assets/Resources/Audios/music_home_loop.wav +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2cabcc5318b0f04d6386e9da27808b53685cb37a3756831433e26898c2b9f25 -size 11081544 diff --git a/Assets/Scripts/OCES/Audio/Generated/MusicSegment.cs b/Assets/Scripts/OCES/Audio/Generated/MusicSegment.cs index 2d3b139..34b73b9 100644 --- a/Assets/Scripts/OCES/Audio/Generated/MusicSegment.cs +++ b/Assets/Scripts/OCES/Audio/Generated/MusicSegment.cs @@ -22,17 +22,31 @@ public partial class MusicSegment : IBinarySerializable /// public string Name { get; set; } + /// + /// time(s) + /// + public double StartOffset { get; set; } + + /// + /// time(s) + /// + public double EndOffset { get; set; } + public void DeSerialize(BinaryReader reader) { Id = reader.ReadUInt32(); Name = reader.ReadString(); + StartOffset = reader.ReadDouble(); + EndOffset = reader.ReadDouble(); } public void Serialize(BinaryWriter writer) { writer.Write(Id); writer.Write(Name); + writer.Write(StartOffset); + writer.Write(EndOffset); } } diff --git a/Assets/Scripts/OCES/Audio/Generated/MusicTransition.cs b/Assets/Scripts/OCES/Audio/Generated/MusicTransition.cs index ee54cc9..90b992a 100644 --- a/Assets/Scripts/OCES/Audio/Generated/MusicTransition.cs +++ b/Assets/Scripts/OCES/Audio/Generated/MusicTransition.cs @@ -51,14 +51,10 @@ public partial class MusicTransition : IBinarySerializable public SyncPoint SyncPoint { get; set; } /// - /// samples + /// 0 = Start + /// 1 = Last Played Segment /// - public uint StartOffset { get; set; } - - /// - /// samples - /// - public uint EndOffset { get; set; } + public SyncSegment SyncSegment { get; set; } public void DeSerialize(BinaryReader reader) @@ -70,8 +66,7 @@ public partial class MusicTransition : IBinarySerializable FadeInOffset = reader.ReadSingle(); AlignMode = (AlignMode)reader.ReadByte(); SyncPoint = (SyncPoint)reader.ReadByte(); - StartOffset = reader.ReadUInt32(); - EndOffset = reader.ReadUInt32(); + SyncSegment = (SyncSegment)reader.ReadByte(); } public void Serialize(BinaryWriter writer) @@ -83,8 +78,7 @@ public partial class MusicTransition : IBinarySerializable writer.Write(FadeInOffset); writer.Write((byte)AlignMode); writer.Write((byte)SyncPoint); - writer.Write(StartOffset); - writer.Write(EndOffset); + writer.Write((byte)SyncSegment); } } diff --git a/Assets/Scripts/OCES/Audio/HandWritten/HandWrittenDefinitions.cs b/Assets/Scripts/OCES/Audio/HandWritten/HandWrittenDefinitions.cs index e7a199f..44cb83b 100644 --- a/Assets/Scripts/OCES/Audio/HandWritten/HandWrittenDefinitions.cs +++ b/Assets/Scripts/OCES/Audio/HandWritten/HandWrittenDefinitions.cs @@ -65,6 +65,12 @@ namespace OCES.Audio Start, SameAsCurrentSegment, } + + public enum SyncSegment + { + Start, + LastPlayedSegment, + } public interface IBinarySerializable { diff --git a/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/MusicContainerPlayer.cs b/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/MusicContainerPlayer.cs index 4150b1c..085add0 100644 --- a/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/MusicContainerPlayer.cs +++ b/Assets/Scripts/OCES/Audio/HandWritten/LongAudio/MusicContainerPlayer.cs @@ -289,8 +289,11 @@ namespace OCES.Audio yield return new WaitUntil(() => done || parentHandle.Cancelled); - if (parentHandle.Cancelled && child != null) - Stop(child); + if (!parentHandle.Cancelled || child == null) + yield break; + Stop(child); + parentHandle.ChildHandles.Remove(child); + } /// @@ -333,20 +336,28 @@ namespace OCES.Audio var handle = new ContainerPlayHandle(); handle.ActiveSources.Add(source); handle.Coroutine = this.m_coroutineHost.StartCoroutine( - WaitSegmentFinish(source, handle, onFinished)); + WaitSegmentFinish(source, handle, onFinished, segment.EndOffset)); return handle; } - IEnumerator WaitSegmentFinish(AudioSource source, ContainerPlayHandle handle, Action onFinished) + IEnumerator WaitSegmentFinish(AudioSource source, ContainerPlayHandle handle, Action onFinished, double endOffset) { + double effectiveTime = endOffset > 0f ? source.clip.length - endOffset : 0f; + + // 1. 等待"逻辑结束"(EndOffset 或自然结束) + yield return new WaitWhile(() => + source.isPlaying && + !handle.Cancelled && + source.time < effectiveTime); + + // 2. 立即通知 container 推进 + if (!handle.Cancelled) onFinished?.Invoke(); + + // 3. 如果 source 还在物理播放(EndOffset 提前退出的情况),等它自然结束并清理资源 yield return new WaitWhile(() => source.isPlaying && !handle.Cancelled); - - source.Stop(); ReturnSource(source); handle.ActiveSources.Remove(source); - if (!handle.Cancelled) - onFinished?.Invoke(); } // ───────────────────────────────────────────── diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset index 90312f7..8c4ceb6 100644 --- a/ProjectSettings/AudioManager.asset +++ b/ProjectSettings/AudioManager.asset @@ -8,7 +8,7 @@ AudioManager: Rolloff Scale: 1 Doppler Factor: 1 Default Speaker Mode: 2 - m_SampleRate: 48000 + m_SampleRate: 44100 m_DSPBufferSize: 256 m_VirtualVoiceCount: 512 m_RealVoiceCount: 32