feat: add PlayOnTrigger for music-synced audio playback
- Add PlayOnTrigger method to AudioSystem for scheduling audio playback on music sync events (beat/bar/grid) - Rename ButtonInvoker to SetStateBind for better clarity - Update PlaySoundBind to support both direct playback and trigger-based playback with callback flags - Add CallbackFlags enum (MusicSyncBeat, MusicSyncBar, MusicSyncGrid) - Update Metronome demo to use new callback flag naming convention - Add test audio file sfx_notice_test.wav - Update scene UI to demonstrate PlayOnTrigger functionality
This commit is contained in:
@@ -103,6 +103,7 @@ public static class AudioObjectDefinitions
|
||||
{ "au_sfx_ui_button_corePlay_clear_cloud1", 70 },
|
||||
{ "au_sfx_ui_button_corePlay_clear_cloud2", 70 },
|
||||
{ "au_sfx_ui_button_corePlay_clear_cloud3", 70 },
|
||||
{ "sfx_notice_test", 71 },
|
||||
};
|
||||
|
||||
public static readonly HashSet<string> AmbiguousNames = new()
|
||||
|
||||
@@ -127,6 +127,49 @@ namespace OCES.Audio
|
||||
ActiveStates = this.m_musicSystem.ActiveStates;
|
||||
}
|
||||
|
||||
public void PlayOnTrigger(uint audioId, CallbackFlags callbackFlags)
|
||||
{
|
||||
Action<uint> callback = null;
|
||||
callback = (id) =>
|
||||
{
|
||||
// 播放音效
|
||||
Play(audioId);
|
||||
|
||||
// 取消订阅,确保只触发一次
|
||||
switch (callbackFlags)
|
||||
{
|
||||
case CallbackFlags.MusicSyncBeat:
|
||||
OnBeat -= callback;
|
||||
break;
|
||||
case CallbackFlags.MusicSyncBar:
|
||||
OnBar -= callback;
|
||||
break;
|
||||
case CallbackFlags.MusicSyncGrid:
|
||||
OnGrid -= callback;
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
// 订阅对应的事件
|
||||
switch (callbackFlags)
|
||||
{
|
||||
case CallbackFlags.MusicSyncBeat:
|
||||
OnBeat += callback;
|
||||
break;
|
||||
case CallbackFlags.MusicSyncBar:
|
||||
OnBar += callback;
|
||||
break;
|
||||
case CallbackFlags.MusicSyncGrid:
|
||||
OnGrid += callback;
|
||||
break;
|
||||
|
||||
default:
|
||||
Debug.LogWarning($"[AudioSystem] Unknown callback flag '{callbackFlags}'." +
|
||||
$"Audio Container with ID {audioId} will be ignored.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────
|
||||
// 初始化
|
||||
// ─────────────────────────────────────────────
|
||||
|
||||
@@ -86,9 +86,10 @@ namespace OCES.Audio
|
||||
public partial class MusicPath : IPathEntry { }
|
||||
public partial class AmbiencePath : IPathEntry { }
|
||||
|
||||
public class SwitchEntry
|
||||
public enum CallbackFlags
|
||||
{
|
||||
public uint SwitchValue;
|
||||
public uint AudioObjectId;
|
||||
MusicSyncBeat = 1,
|
||||
MusicSyncBar = 2,
|
||||
MusicSyncGrid = 3,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user