123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- using System;
- using UnityEngine;
- public class OVRHapticsClip
- {
- public OVRHapticsClip()
- {
- this.Capacity = OVRHaptics.Config.MaximumBufferSamplesCount;
- this.Samples = new byte[this.Capacity * OVRHaptics.Config.SampleSizeInBytes];
- }
- public OVRHapticsClip(int capacity)
- {
- this.Capacity = ((capacity < 0) ? 0 : capacity);
- this.Samples = new byte[this.Capacity * OVRHaptics.Config.SampleSizeInBytes];
- }
- public OVRHapticsClip(byte[] samples, int samplesCount)
- {
- this.Samples = samples;
- this.Capacity = this.Samples.Length / OVRHaptics.Config.SampleSizeInBytes;
- this.Count = ((samplesCount < 0) ? 0 : samplesCount);
- }
- public OVRHapticsClip(OVRHapticsClip a, OVRHapticsClip b)
- {
- int count = a.Count;
- if (b.Count > count)
- {
- count = b.Count;
- }
- this.Capacity = count;
- this.Samples = new byte[this.Capacity * OVRHaptics.Config.SampleSizeInBytes];
- int num = 0;
- while (num < a.Count || num < b.Count)
- {
- if (OVRHaptics.Config.SampleSizeInBytes == 1)
- {
- byte sample = 0;
- if (num < a.Count && num < b.Count)
- {
- sample = (byte)Mathf.Clamp((int)(a.Samples[num] + b.Samples[num]), 0, 255);
- }
- else if (num < a.Count)
- {
- sample = a.Samples[num];
- }
- else if (num < b.Count)
- {
- sample = b.Samples[num];
- }
- this.WriteSample(sample);
- }
- num++;
- }
- }
- public OVRHapticsClip(AudioClip audioClip, int channel = 0)
- {
- float[] array = new float[audioClip.samples * audioClip.channels];
- audioClip.GetData(array, 0);
- this.InitializeFromAudioFloatTrack(array, (double)audioClip.frequency, audioClip.channels, channel);
- }
- public int Count { get; private set; }
- public int Capacity { get; private set; }
- public byte[] Samples { get; private set; }
- public void WriteSample(byte sample)
- {
- if (this.Count >= this.Capacity)
- {
- return;
- }
- if (OVRHaptics.Config.SampleSizeInBytes == 1)
- {
- this.Samples[this.Count * OVRHaptics.Config.SampleSizeInBytes] = sample;
- }
- this.Count++;
- }
- public void Reset()
- {
- this.Count = 0;
- }
- private void InitializeFromAudioFloatTrack(float[] sourceData, double sourceFrequency, int sourceChannelCount, int sourceChannel)
- {
- double num = sourceFrequency / (double)OVRHaptics.Config.SampleRateHz;
- int num2 = (int)num;
- double num3 = num - (double)num2;
- double num4 = 0.0;
- int num5 = sourceData.Length;
- this.Count = 0;
- this.Capacity = num5 / sourceChannelCount / num2 + 1;
- this.Samples = new byte[this.Capacity * OVRHaptics.Config.SampleSizeInBytes];
- int i = sourceChannel % sourceChannelCount;
- while (i < num5)
- {
- if (OVRHaptics.Config.SampleSizeInBytes == 1)
- {
- this.WriteSample((byte)(Mathf.Clamp01(Mathf.Abs(sourceData[i])) * 255f));
- }
- i += num2 * sourceChannelCount;
- num4 += num3;
- if ((int)num4 > 0)
- {
- i += (int)num4 * sourceChannelCount;
- num4 -= (double)((int)num4);
- }
- }
- }
- }
|