Files
Oliver 6e8e17ec44 feat: StartOffset
- 实现startOffset
- 修复EndOffset = 0 + 循环播放时,音乐会大量重复播放的错误。
- 增加数据校验和 BeatClock 联动。StartOffset不正确时停止bar+级 callback。
- BeatClock 现在会在每次重新播放时重启,以解决EndOffset配置错误被舍弃时,拍子对不上的问题。
2026-05-12 15:47:04 +08:00

41 lines
1.4 KiB
C#

using UnityEngine;
namespace OCES.Audio
{
public partial class MusicContainerConfig
{
/// <summary>
/// 解析拍号字符串(如 "4/4", "3/4"),返回每小节拍数。
/// </summary>
public static int GetBeatsPerBar(string timeSig)
{
if (string.IsNullOrEmpty(timeSig)) return 4;
string[] parts = timeSig.Split('/');
if (parts.Length >= 1 && int.TryParse(parts[0], out int beats))
return beats;
return 4;
}
public void Validate(MusicSegmentConfig segmentConfig)
{
foreach (MusicContainer container in this.m_musicContainerInfos.Values)
{
foreach (uint segmentId in container.Segments)
{
if (segmentId < 1000000)
{
MusicSegment segment = segmentConfig.QueryById(segmentId);
if (segment is { IsOffBeat: true })
{
container.TimeSig = "";
Debug.LogWarning($"[AudioSystem] {container.Id} Container含有错误配置的Segment {segment.Id}。" +
"切换至此Container时将不会启动beat/grid回调");
break;
}
}
}
}
}
}
}