public void PlayVibration()
    {
        vibrationValue.Clear();
        curFile = rumblePresets[iterator].bytes;
        Result result;

        result = VibrationFile.Parse(ref curFileInfo, ref curFileContext, curFile, curFile.Length);
        Debug.Assert(result.IsSuccess());
        sampleA = 0;

        vibrationTimer = (curFileInfo.sampleLength - 1) / samplesPerSec;
    }
    public void PlayVibrationPreset(string presetName, float intensityMultiplier)
    {
        if (intensityMultiplier == 0f)
        {
            intensityMultiplier = 1f;
        }
        intensityOverallMultiplier = intensityMultiplier;

        int toUse = -1;

        for (int it = 0; (it < rumblePresets.Length && toUse == -1); it++)
        {
            if (rumblePresets[it].name == presetName)
            {
                toUse = it;
            }
        }

        if (toUse != -1)
        {
            vibrationValue.Clear();
            curFile = rumblePresets[toUse].bytes;
            Result result;
            result = VibrationFile.Parse(ref curFileInfo, ref curFileContext, curFile, curFile.Length);
            Debug.Assert(result.IsSuccess());
            sampleA = 0;
        }

        vibrationTimer = (curFileInfo.sampleLength - 1) / samplesPerSec;

        if (displayDebugLogs)
        {
            if (toUse != -1)
            {
                Debug.Log("PLAYING: " + rumblePresets[toUse].name);
            }
            else
            {
                Debug.Log("Preset: " + presetName + "... was not found!");
            }
        }
    }
    private void Update()
    {
        if (displayText.gameObject.activeInHierarchy)
        {
            displayText.text   = rumblePresets[iterator].name;
            intensityText.text = (intensitySlider.value / 100f).ToString("F2");
        }

        if (vibrationTimer > 0f)
        {
            if (UpdatePadState())
            {
                vibrationValue.Clear();

                VibrationFile.RetrieveValue(ref vibrationValue, sampleA, ref curFileContext);
                if ((sampleA % sampleSize) == 0)
                {
                    sampleA++;
                }                                               // 200 sample / sec
                sampleA += sampleIterate;
                if (sampleA >= curFileInfo.sampleLength)
                {
                    sampleA = 0;
                }

                for (int i = 0; i < vibrationDeviceCount; i++)
                {
                    outputValue.Clear();
                    outputValue = VibrationValue.Make(vibrationValue.amplitudeLow * overallIntensity * intensityOverallMultiplier,
                                                      vibrationValue.frequencyLow * overallIntensity * intensityOverallMultiplier,
                                                      vibrationValue.amplitudeHigh * overallIntensity * intensityOverallMultiplier,
                                                      vibrationValue.frequencyHigh * overallIntensity * intensityOverallMultiplier);
                    curIntensity = intensitySlider.value / 100f;

                    if (displayDebugLogs)
                    {
                        Debug.Log(curIntensity);
                    }

                    /*
                     *  outputValue = VibrationValue.Make(vibrationValue.amplitudeLow * curIntensity,
                     *  vibrationValue.frequencyLow * curIntensity,
                     *  vibrationValue.amplitudeHigh * curIntensity,
                     *  vibrationValue.frequencyHigh * curIntensity);
                     */
                    Vibration.SendValue(vibrationDeviceHandles[i], outputValue);
                }
            }

            vibrationTimer -= 1f / 60f;

            if (vibrationTimer <= 0f)
            {
                if (UpdatePadState())
                {
                    vibrationValue.Clear();
                    sampleA = 0;
                    for (int i = 0; i < vibrationDeviceCount; i++)
                    {
                        outputValue.Clear();
                        outputValue = VibrationValue.Make(0f, 0f, 0f, 0f);
                        Vibration.SendValue(vibrationDeviceHandles[i], outputValue);
                    }
                }
            }
        }
    }