add looped trigger
This commit is contained in:
parent
90afb6b074
commit
b6bee77635
11 changed files with 210 additions and 22 deletions
|
@ -61,7 +61,9 @@
|
|||
<Compile Include="Assets\Scenes\Examples\LevelThreshold\script\ConstructionColumnBehaviour.cs" />
|
||||
<Compile Include="Assets\Scenes\Examples\LevelThreshold\script\Spawner.cs" />
|
||||
<Compile Include="Assets\Scenes\Examples\MIDI\script\CubeSync.cs" />
|
||||
<Compile Include="Assets\Scenes\Examples\MIDI\script\MidiSyncCounter.cs" />
|
||||
<Compile Include="Assets\Scenes\Examples\MIDI\script\PositionBind.cs" />
|
||||
<Compile Include="Assets\Scenes\Examples\MIDI\script\RandomPosition.cs" />
|
||||
<Compile Include="Assets\Scenes\Examples\PdBackend\script\BoomBall.cs" />
|
||||
<Compile Include="Assets\Scenes\Examples\PdBackend\script\MoveBall.cs" />
|
||||
<Compile Include="Assets\Scenes\Examples\PostProcessing\script\BokehBind.cs" />
|
||||
|
@ -75,7 +77,7 @@
|
|||
<Compile Include="Assets\Scripts\PdConnection\ISpectrumGenerator.cs" />
|
||||
<Compile Include="Assets\Scripts\PdConnection\MidiLogger.cs" />
|
||||
<Compile Include="Assets\Scripts\PdConnection\MidiParser.cs" />
|
||||
<Compile Include="Assets\Scripts\PdConnection\MidiSyncCounter.cs" />
|
||||
<Compile Include="Assets\Scripts\PdConnection\MidiSyncedLoop.cs" />
|
||||
<Compile Include="Assets\Scripts\PdConnection\PdArray.cs" />
|
||||
<Compile Include="Assets\Scripts\PdConnection\PdArrayContainer.cs" />
|
||||
<Compile Include="Assets\Scripts\PdConnection\PdArraySelector.cs" />
|
||||
|
|
|
@ -479,6 +479,7 @@ GameObject:
|
|||
- component: {fileID: 1261823481}
|
||||
- component: {fileID: 1261823480}
|
||||
- component: {fileID: 1261823482}
|
||||
- component: {fileID: 1261823485}
|
||||
- component: {fileID: 1261823483}
|
||||
- component: {fileID: 1261823484}
|
||||
m_Layer: 0
|
||||
|
@ -540,7 +541,18 @@ MonoBehaviour:
|
|||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
- m_Target: {fileID: 669316603}
|
||||
m_MethodName: onSyncReceived
|
||||
m_MethodName: OnSyncReceived
|
||||
m_Mode: 0
|
||||
m_Arguments:
|
||||
m_ObjectArgument: {fileID: 0}
|
||||
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||
m_IntArgument: 0
|
||||
m_FloatArgument: 0
|
||||
m_StringArgument:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
- m_Target: {fileID: 1261823485}
|
||||
m_MethodName: OnSyncReceived
|
||||
m_Mode: 0
|
||||
m_Arguments:
|
||||
m_ObjectArgument: {fileID: 0}
|
||||
|
@ -606,6 +618,33 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
sequence: 00000000000000000000000000000000
|
||||
--- !u!114 &1261823485
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1261823479}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f5f9defef7af2514590dadc0a6cddbac, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
loopLengthInBeat: 4
|
||||
loopStarted:
|
||||
m_PersistentCalls:
|
||||
m_Calls:
|
||||
- m_Target: {fileID: 2001732971}
|
||||
m_MethodName: OnLoopStarted
|
||||
m_Mode: 1
|
||||
m_Arguments:
|
||||
m_ObjectArgument: {fileID: 0}
|
||||
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||
m_IntArgument: 0
|
||||
m_FloatArgument: 0
|
||||
m_StringArgument:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
--- !u!1 &1461024797
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
@ -866,6 +905,97 @@ CanvasRenderer:
|
|||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1790437803}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!1 &2001732970
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2001732974}
|
||||
- component: {fileID: 2001732973}
|
||||
- component: {fileID: 2001732972}
|
||||
- component: {fileID: 2001732971}
|
||||
m_Layer: 0
|
||||
m_Name: Capsule
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!114 &2001732971
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2001732970}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 3b84bb1a9cc55a846bfd9ea1161e8098, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
--- !u!23 &2001732972
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2001732970}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
--- !u!33 &2001732973
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2001732970}
|
||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!4 &2001732974
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2001732970}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 7
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &2049244779
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
|
@ -3,23 +3,20 @@ using UnityEngine;
|
|||
|
||||
public class CubeSync : MonoBehaviour
|
||||
{
|
||||
private int counter_ = 0;
|
||||
private float currentX_;
|
||||
private float targetX_;
|
||||
private float lastCallBack_;
|
||||
private float callbackInterval_ = 0.05f;
|
||||
|
||||
public void onSyncReceived(MidiSync midiSync)
|
||||
public void OnSyncReceived(MidiSync midiSync, int count)
|
||||
{
|
||||
if (midiSync == MidiSync.Clock)
|
||||
{
|
||||
var now = Time.realtimeSinceStartup;
|
||||
callbackInterval_ = now - lastCallBack_;
|
||||
lastCallBack_ = now;
|
||||
currentX_ = (counter_ - 12) * 0.2f;
|
||||
counter_++;
|
||||
targetX_ = (counter_ - 12) * 0.2f;
|
||||
counter_ %= 24;
|
||||
currentX_ = (count % 24 - 12) * 0.2f;
|
||||
targetX_ = (count % 24 - 12) * 0.2f;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7,15 +7,13 @@ public class MidiSyncCounter : MonoBehaviour
|
|||
|
||||
[SerializeField] private Text counter;
|
||||
|
||||
private int count_ = 0;
|
||||
|
||||
public void OnSyncReceived(MidiSync midiSync)
|
||||
public void OnSyncReceived(MidiSync midiSync, int count)
|
||||
{
|
||||
if (midiSync == MidiSync.Clock)
|
||||
{
|
||||
count_++;
|
||||
var tick = count_ % 24;
|
||||
var beat = count_ / 24;
|
||||
var tick = count % 24;
|
||||
var beat = count / 24;
|
||||
var measure = beat / 4;
|
||||
|
||||
counter.text = (measure + 1) + ":" + (beat % 4 + 1) + ":" + tick;
|
||||
|
@ -23,7 +21,6 @@ public class MidiSyncCounter : MonoBehaviour
|
|||
else if (midiSync == MidiSync.Start)
|
||||
{
|
||||
Debug.Log("playback started");
|
||||
count_ = 0;
|
||||
}
|
||||
else if (midiSync == MidiSync.Stop)
|
||||
{
|
|
@ -0,0 +1,14 @@
|
|||
using UnityEngine;
|
||||
|
||||
namespace cylvester
|
||||
{
|
||||
public class RandomPosition : MonoBehaviour
|
||||
{
|
||||
public void OnLoopStarted()
|
||||
{
|
||||
var x = Random.Range(-3f, 3f);
|
||||
var y = Random.Range(-3f, 3f);
|
||||
transform.localPosition = new Vector3(x, y, 0f);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3b84bb1a9cc55a846bfd9ea1161e8098
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -8,7 +8,7 @@ namespace cylvester
|
|||
{}
|
||||
|
||||
[Serializable]
|
||||
public class UnitySyncEvent : UnityEvent<MidiSync>
|
||||
public class UnitySyncEvent : UnityEvent<MidiSync, int>
|
||||
{}
|
||||
|
||||
public enum MidiSync
|
||||
|
@ -35,7 +35,7 @@ namespace cylvester
|
|||
public interface IMidiParser : IDisposable
|
||||
{
|
||||
event Action<MidiMessage> MidiMessageReceived;
|
||||
event Action<MidiSync> MidiSyncReceived;
|
||||
event Action<MidiSync, int> MidiSyncReceived;
|
||||
}
|
||||
|
||||
public class MidiParser : IMidiParser
|
||||
|
@ -51,6 +51,7 @@ namespace cylvester
|
|||
private Accept accept_ = Accept.StatusByte;
|
||||
private readonly IPdReceiver pdReceiver_;
|
||||
private readonly Action<byte[]> onDataReceived_;
|
||||
private int count_;
|
||||
|
||||
public MidiParser(IPdReceiver pdReceiver)
|
||||
{
|
||||
|
@ -99,11 +100,16 @@ namespace cylvester
|
|||
element != (byte)MidiSync.Stop)
|
||||
return false;
|
||||
|
||||
MidiSyncReceived?.Invoke((MidiSync)element);
|
||||
if (element == (byte) MidiSync.Clock)
|
||||
count_++;
|
||||
else
|
||||
count_ = 0;
|
||||
|
||||
MidiSyncReceived?.Invoke((MidiSync)element, count_);
|
||||
return true;
|
||||
}
|
||||
|
||||
public event Action<MidiMessage> MidiMessageReceived;
|
||||
public event Action<MidiSync> MidiSyncReceived;
|
||||
public event Action<MidiSync, int> MidiSyncReceived;
|
||||
}
|
||||
}
|
21
UnityProject/Assets/Scripts/PdConnection/MidiSyncedLoop.cs
Normal file
21
UnityProject/Assets/Scripts/PdConnection/MidiSyncedLoop.cs
Normal file
|
@ -0,0 +1,21 @@
|
|||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
namespace cylvester
|
||||
{
|
||||
public class MidiSyncedLoop : MonoBehaviour
|
||||
{
|
||||
[SerializeField, Range(1, 100)] private int loopLengthInBeat = 1;
|
||||
[SerializeField] private UnityEvent loopStarted;
|
||||
|
||||
public void OnSyncReceived(MidiSync midiSync, int counter)
|
||||
{
|
||||
var loopLengthTicks = loopLengthInBeat * 24;
|
||||
if(counter % loopLengthTicks == 0)
|
||||
loopStarted.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: f5f9defef7af2514590dadc0a6cddbac
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -1,7 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
namespace cylvester
|
||||
{
|
||||
|
@ -39,7 +38,7 @@ namespace cylvester
|
|||
|
||||
private Action onSamplePlaybackChanged_;
|
||||
private Action<MidiMessage> onMidiMessageReceived_;
|
||||
private Action<MidiSync> onMidiSyncReceived_;
|
||||
private Action<MidiSync, int> onMidiSyncReceived_;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
|
@ -72,7 +71,7 @@ namespace cylvester
|
|||
};
|
||||
|
||||
onMidiMessageReceived_ = (message) => { midiMessageReceived.Invoke(message); };
|
||||
onMidiSyncReceived_ = (sync) => { midiSyncReceived.Invoke(sync); };
|
||||
onMidiSyncReceived_ = (sync, count) => { midiSyncReceived.Invoke(sync, count); };
|
||||
|
||||
samplePlaybackObserver_.ValueChanged += onSamplePlaybackChanged_;
|
||||
midiParser_.MidiMessageReceived += onMidiMessageReceived_;
|
||||
|
|
Loading…
Reference in a new issue