feat: StartOffset
- 实现startOffset - 修复EndOffset = 0 + 循环播放时,音乐会大量重复播放的错误。 - 增加数据校验和 BeatClock 联动。StartOffset不正确时停止bar+级 callback。 - BeatClock 现在会在每次重新播放时重启,以解决EndOffset配置错误被舍弃时,拍子对不上的问题。
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace OCES.Audio
|
||||
{
|
||||
public partial class MusicSegment
|
||||
{
|
||||
public bool IsOffBeat { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public partial class MusicSegmentConfig
|
||||
{
|
||||
// TODO: 负偏移功能待开发
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
foreach (MusicSegment segment in this.m_musicSegmentInfos.Values)
|
||||
{
|
||||
AudioClip clip = Resources.Load<AudioClip>($"Audios/{segment.Name}");
|
||||
if (!clip)
|
||||
{
|
||||
Debug.LogError($"[MusicSegmentConfig] 音频文件未找到: {segment.Name}, SegmentId: {segment.Id}");
|
||||
segment.StartOffset = 0;
|
||||
segment.EndOffset = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
double clipLength = clip.length;
|
||||
|
||||
if (segment.StartOffset > clipLength)
|
||||
{
|
||||
Debug.LogError($"[MusicSegmentConfig] StartOffset({segment.StartOffset}) > AudioClip.length({clipLength}), SegmentId: {segment.Id}, Name: {segment.Name}" +
|
||||
"已弃用 StartOffset");
|
||||
segment.StartOffset = 0;
|
||||
segment.IsOffBeat = true;
|
||||
}
|
||||
|
||||
if (segment.EndOffset > clipLength)
|
||||
{
|
||||
Debug.LogError($"[MusicSegmentConfig] EndOffset({segment.EndOffset}) > AudioClip.length({clipLength}), SegmentId: {segment.Id}, Name: {segment.Name}");
|
||||
segment.EndOffset = 0;
|
||||
}
|
||||
|
||||
if (segment.StartOffset + segment.EndOffset > clipLength)
|
||||
{
|
||||
Debug.LogError($"[MusicSegmentConfig] StartOffset({segment.StartOffset}) + EndOffset({segment.EndOffset}) > AudioClip.length({clipLength}), SegmentId: {segment.Id}, Name: {segment.Name}");
|
||||
segment.StartOffset = segment.EndOffset = 0;
|
||||
segment.IsOffBeat = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user