public void SetEvent(FMOD.Event evt)
 {
     if (evt == null) {
         if (m_runtimeEvent != null) {
             if (m_eventSystemHandle != null &&
                 m_eventSystemHandle.getEventSystem() != null &&
                 m_eventSystemHandle.getEventSystem().wasCleaned() == false) {
                 Stop();
                 CleanParameters();
                 m_eventSystemHandle.getEventSystem().releaseRunningInstance(this);
             }
             freeEventData();
             m_runtimeEvent = null;
         }
     } else {
         m_runtimeEvent = evt;
         foreach (FmodRuntimeEventParameter param in getParameters()) {
             param.SetEvent(m_runtimeEvent);
         }
         setMinRange(getMinRange());
         setMaxRange(getMaxRange());
         if (! m_selfHandle.IsAllocated) {
             m_selfHandle = GCHandle.Alloc(this, GCHandleType.Normal);
         }
         ERRCHECK(evt.setCallback(FmodEventAudioSource.EventStoppedCallbackStatic, (IntPtr)m_selfHandle));
     }
 }