public void RegisterStreamEvent(Vector2Int frequencyRange, TemporalConductorCallback callback)
		{
			TemporalCoordinatorEvent te = null;

			if (!_registeredEvents.ContainsKey (frequencyRange)) {
				
				te = new TemporalCoordinatorEvent ();
				_registeredEvents.Add (frequencyRange, te);
			}

			if (!_registeredEvents [frequencyRange].HasStreamEvents) {
				te.HasStreamEvents = true;
				AudioStreamEvent ase = new AudioStreamEvent (frequencyRange);
				ase.SetCallback (streamInternalCallback);
				_conductorInstance.RegisterEvent (ase);
			}


			te = _registeredEvents [frequencyRange];
			if (te.Callbacks.Contains (callback)) {
				Debug.LogWarning ("Attempting to register same callback twice. This is not allowed. Please supply different method signature as callback.");
				return;
			}
			te.StreamEvent += callback;
		}
		public void UnregisterBeatEvent(Vector2Int frequencyRange, float beatDelta,TemporalConductorCallback callback)
		{
			if (!_registeredEvents.ContainsKey (frequencyRange))
				return;
			TemporalCoordinatorEvent te = _registeredEvents [frequencyRange];

			if (te.Callbacks.Contains (callback) && te.BeatEvents.ContainsKey (beatDelta)) {
				te.BeatEvents [beatDelta].Event -= callback;
				te.Callbacks.Remove (callback);
			}
		}
		public void UnregisterStreamEvent(Vector2Int frequencyRange, TemporalConductorCallback callback)
		{
			if (!_registeredEvents.ContainsKey (frequencyRange))
				return;
			TemporalCoordinatorEvent te = _registeredEvents [frequencyRange];

			if (te.Callbacks.Contains (callback)) {
				te.StreamEvent -= callback;
				te.Callbacks.Remove (callback);
			}

		}
 //make the programmer want it :p
 public void SetCallback(TemporalConductorCallback cb)
 {
     _callback = cb;
 }
		public void RegisterBeatEvent(Vector2Int frequencyRange, float beatDelta,int halfFFTWindow,TemporalConductorCallback callback)
		{
			if (beatDelta == 0) {
				Debug.LogError ("Attempting to register beat event with 0 beat delta. This is not allowed.");
				return;
			}

			TemporalCoordinatorEvent te = null;

			if (!_registeredEvents.ContainsKey (frequencyRange)) {
				te = new TemporalCoordinatorEvent ();
				_registeredEvents.Add (frequencyRange, te);
			}

			te = _registeredEvents [frequencyRange];

			if (!te.BeatEvents.ContainsKey (beatDelta)) {
				te.BeatEvents.Add (beatDelta, new BeatEventDatum());
				BeatEvent be = new BeatEvent (frequencyRange, beatDelta,halfFFTWindow);
				be.SetCallback (beatInternalCallback);
				_conductorInstance.RegisterEvent (be);
			}

			te.BeatEvents [beatDelta].Event += callback;
		}