コード例 #1
0
    private FMOD.RESULT VoiceEventCallback(EVENT_CALLBACK_TYPE callbackType, EventInstance eventInstance, IntPtr parameters)
    {
        IntPtr voiceStatePtr;

        FMOD.RESULT result = eventInstance.getUserData(out voiceStatePtr);

        if (result != FMOD.RESULT.OK)
        {
            Debug.LogError("FMOD error: " + result);
        }
        else
        {
            if (voiceStatePtr != IntPtr.Zero)
            {
                GCHandle       voiceInfoHandle = GCHandle.FromIntPtr(voiceStatePtr);
                VoiceStateInfo voiceInfo       = (VoiceStateInfo)voiceInfoHandle.Target;

                switch (callbackType)
                {
                case EVENT_CALLBACK_TYPE.START_FAILED:
                case EVENT_CALLBACK_TYPE.STOPPED:
                    eventInstance.setUserData(IntPtr.Zero);
                    eventInstance.setCallback(null);
                    eventInstance.release();
                    voiceInfo.State = VoiceState.Silent;
                    break;
                }
            }
        }

        return(FMOD.RESULT.OK);
    }
コード例 #2
0
    private void Start()
    {
        voiceCallback = new EVENT_CALLBACK(VoiceEventCallback);

        // create and pin voiceinfo in memory
        voiceInfo       = new VoiceStateInfo();
        voiceInfo.State = VoiceState.Silent;
        voiceInfoHandle = GCHandle.Alloc(voiceInfo, GCHandleType.Pinned);
    }