WIP: Music callback
- 头几拍会抖动一下,导致对不上拍子
This commit is contained in:
@@ -7,17 +7,21 @@ namespace OCES.Audio
|
||||
/// 音乐与环境音系统。由 AudioSystem 持有并初始化。
|
||||
/// 对外只暴露 OnStateChanged,由 AudioSystem.SetState 转发调用。
|
||||
/// </summary>
|
||||
public class MusicSystem : MonoBehaviour
|
||||
class MusicSystem : MonoBehaviour
|
||||
{
|
||||
MusicStateRouter m_stateRouter;
|
||||
MusicChannelPlayer m_musicChannel;
|
||||
AmbienceChannelPlayer m_ambienceChannel;
|
||||
|
||||
internal event Action<uint> OnBeat;
|
||||
internal event Action<uint> OnBar;
|
||||
internal event Action<uint> OnGrid;
|
||||
|
||||
// 记录上一次两个通道各自匹配到的 PathId,用于查 Transition 表
|
||||
uint m_lastMusicPathId;
|
||||
uint m_lastAmbiencePathId;
|
||||
|
||||
public void Initialize(
|
||||
internal void Initialize(
|
||||
MusicSegmentConfig segments,
|
||||
MusicContainerConfig containers,
|
||||
MusicPathConfig musicPaths,
|
||||
@@ -31,14 +35,20 @@ namespace OCES.Audio
|
||||
MusicContainerPlayer ambientContainerPlayer = new(containers, segments, ambiencePool, this);
|
||||
|
||||
this.m_stateRouter = new MusicStateRouter(musicPaths, ambiencePaths);
|
||||
this.m_musicChannel = new MusicChannelPlayer(containers, musicTransitions, musicContainerPlayer, this);
|
||||
this.m_musicChannel = new MusicChannelPlayer(
|
||||
containers, musicTransitions, musicContainerPlayer, this,
|
||||
id => OnBeat?.Invoke(id),
|
||||
id => OnBar?.Invoke(id),
|
||||
id => OnGrid?.Invoke(id));
|
||||
this.m_ambienceChannel = new AmbienceChannelPlayer(ambienceTransitions, ambientContainerPlayer, this);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 由 AudioSystem.SetState 调用,更新状态并驱动两个通道切换。
|
||||
/// </summary>
|
||||
public void OnStateChanged<TEnum>(TEnum state) where TEnum : Enum
|
||||
internal void OnStateChanged<TEnum>(TEnum state) where TEnum : Enum
|
||||
{
|
||||
this.m_stateRouter.SetState(
|
||||
state,
|
||||
|
||||
Reference in New Issue
Block a user