コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
        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;
                }
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }