feat: StartOffset

- 实现startOffset
- 修复EndOffset = 0 + 循环播放时,音乐会大量重复播放的错误。
- 增加数据校验和 BeatClock 联动。StartOffset不正确时停止bar+级 callback。
- BeatClock 现在会在每次重新播放时重启,以解决EndOffset配置错误被舍弃时,拍子对不上的问题。
This commit is contained in:
2026-05-12 15:47:04 +08:00
parent bb472da311
commit 8b6fabda12
10 changed files with 143 additions and 60 deletions
@@ -302,6 +302,10 @@ namespace OCES.Audio
var musicTransitions = AudioConfigLoader.Load<MusicTransitionConfig>($"{k_audioConfigPath}/MusicTransition");
var ambienceTransitions = AudioConfigLoader.Load<AmbienceTransitionConfig>($"{k_audioConfigPath}/AmbienceTransition");
//运行时数据验证
segments.Validate();
containers.Validate(segments);
// MusicSystem 需要运行协程,作为 MonoBehaviour 挂载在同一 GameObject 上
this.m_musicSystem = gameObject.AddComponent<MusicSystem>();
@@ -338,6 +342,7 @@ namespace OCES.Audio
void Start()
{
// Debug.Log("[AudioSystem] Start");
// ── 启动默认音乐与环境音 ──
// 触发一次初始状态,让音乐系统从默认状态开始匹配
if (this.startWithMusic)
@@ -389,7 +394,7 @@ namespace OCES.Audio
try
{
T config = new T();
T config = new();
using MemoryStream ms = new(File.ReadAllBytes(path));
using BinaryReader reader = new(ms);
config.DeSerialize(reader);
@@ -414,10 +419,5 @@ namespace OCES.Audio
Debug.LogError($"{tableName} 解析出错,类型 {typeof(T)}");
return default;
}
class AudioObjectArrayWrapper<T>
{
public T[] AudioObjects;
}
}
}