private void ResamplePreviewLooped(StreamedAudioClipPreview.ClipPreviewDetails details, float[] resampledPreview) { int num = details.preview.Length; int channels = this.m_Clip.channels; int previewSamples = details.previewSamples; double deltaStep = details.deltaStep; double num2 = details.normalizedStart * (double)previewSamples; float[] preview = details.preview; if (deltaStep > 0.5) { int num3 = (int)num2; int num4 = num3; for (int i = 0; i < details.previewPixelsToRender; i++) { for (int j = 0; j < channels; j++) { int num5 = num3; num4 = (int)num2; int num6 = (2 * num5 * channels + j * 2) % num; float num7 = preview[num6]; float num8 = preview[num6 + 1]; while (++num5 < num4) { num6 = (2 * num5 * channels + j * 2) % num; num7 = Mathf.Max(num7, preview[num6]); num8 = Mathf.Min(num8, preview[num6 + 1]); } resampledPreview[2 * i * channels + j * 2] = num8; resampledPreview[2 * i * channels + j * 2 + 1] = num7; } num2 += deltaStep; num3 = num4; } } else { for (int k = 0; k < details.previewPixelsToRender; k++) { int num9 = (int)(num2 - 1.0); int num10 = num9 + 1; float num11 = (float)(num2 - 1.0 - (double)num9); for (int l = 0; l < channels; l++) { int num12 = (2 * num9 * channels + l * 2) % num; float num13 = preview[num12]; float num14 = preview[num12 + 1]; int num15 = (2 * num10 * channels + l * 2) % num; float num16 = preview[num15]; float num17 = preview[num15 + 1]; resampledPreview[2 * k * channels + l * 2] = num11 * num17 + (1f - num11) * num14; resampledPreview[2 * k * channels + l * 2 + 1] = num11 * num16 + (1f - num11) * num13; } num2 += deltaStep; } } }
private void ResamplePreviewConfined(StreamedAudioClipPreview.ClipPreviewDetails details, float[] resampledPreview) { int channels = this.m_Clip.channels; int previewSamples = details.previewSamples; double deltaStep = details.deltaStep; double num = details.normalizedStart * (double)previewSamples; float[] preview = details.preview; if (deltaStep > 0.5) { int num2 = (int)num; int num3 = num2; for (int i = 0; i < details.previewPixelsToRender; i++) { for (int j = 0; j < channels; j++) { int num4 = num2; num3 = (int)num; float num5 = preview[2 * num4 * channels + j * 2]; float num6 = preview[2 * num4 * channels + j * 2 + 1]; while (++num4 < num3) { num5 = Mathf.Max(num5, preview[2 * num4 * channels + j * 2]); num6 = Mathf.Min(num6, preview[2 * num4 * channels + j * 2 + 1]); } resampledPreview[2 * i * channels + j * 2] = num6; resampledPreview[2 * i * channels + j * 2 + 1] = num5; } num += deltaStep; num2 = num3; } } else { for (int k = 0; k < details.previewPixelsToRender; k++) { int num7 = (int)(num - 1.0); int num8 = num7 + 1; float num9 = (float)(num - 1.0 - (double)num7); num7 = Mathf.Max(0, num7); num8 = Mathf.Min(num8, previewSamples - 1); for (int l = 0; l < channels; l++) { float num10 = preview[2 * num7 * channels + l * 2]; float num11 = preview[2 * num7 * channels + l * 2 + 1]; float num12 = preview[2 * num8 * channels + l * 2]; float num13 = preview[2 * num8 * channels + l * 2 + 1]; resampledPreview[2 * k * channels + l * 2] = num9 * num13 + (1f - num9) * num11; resampledPreview[2 * k * channels + l * 2 + 1] = num9 * num12 + (1f - num9) * num10; } num += deltaStep; } } }
protected override void OnModifications(WaveformPreview.MessageFlags cFlags) { bool flag = false; if (WaveformPreview.HasFlag(cFlags, WaveformPreview.MessageFlags.TextureChanged) || WaveformPreview.HasFlag(cFlags, WaveformPreview.MessageFlags.Size) || WaveformPreview.HasFlag(cFlags, WaveformPreview.MessageFlags.Length) || WaveformPreview.HasFlag(cFlags, WaveformPreview.MessageFlags.Looping)) { this.KillAndClearStreamers(); if (base.length <= 0.0) { return; } StreamedAudioClipPreview.ClipPreviewDetails details = new StreamedAudioClipPreview.ClipPreviewDetails(this.m_Clip, base.looping, (int)base.Size.x, base.start, base.length); this.UploadPreview(details); if (details.IsCandidateForStreaming()) { flag = true; } } if (!base.optimized) { this.KillAndClearStreamers(); flag = false; } else if (WaveformPreview.HasFlag(cFlags, WaveformPreview.MessageFlags.Optimization) && !flag) { StreamedAudioClipPreview.ClipPreviewDetails clipPreviewDetails = new StreamedAudioClipPreview.ClipPreviewDetails(this.m_Clip, base.looping, (int)base.Size.x, base.start, base.length); if (clipPreviewDetails.IsCandidateForStreaming()) { flag = true; } } if (flag) { this.m_StreamedSegments = this.CalculateAndStartStreamers(base.start, base.length); if (this.m_StreamedSegments != null && this.m_StreamedSegments.Length > 0) { StreamedAudioClipPreview.Segment[] streamedSegments = this.m_StreamedSegments; for (int i = 0; i < streamedSegments.Length; i++) { StreamedAudioClipPreview.Segment segment = streamedSegments[i]; if (!this.m_Contexts.ContainsKey(segment.streamer)) { this.m_Contexts.Add(segment.streamer, new StreamedAudioClipPreview.StreamingContext()); } } } } base.OnModifications(cFlags); }
private void UploadPreview(StreamedAudioClipPreview.ClipPreviewDetails details) { int channels = details.clip.channels; float[] array = new float[(int)((float)channels * base.Size.x * 2f)]; if (details.localStart + details.localLength > (double)details.clip.length) { this.ResamplePreviewLooped(details, array); } else { this.ResamplePreviewConfined(details, array); } this.SetMMWaveData(0, array); }