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