Пример #1
0
        internal static Source PlaySample(OsuSamples sample, SampleSet set = SampleSet.Soft, float volume = 1)
        {
            if (Effect == null)
            {
                return(null);
            }

            int buffer = LoadSample(sample, set);

            if (buffer == -1)
            {
                return(null);
            }

            int lastPlayed = -1;

            if (lastPlayedTimes.TryGetValue((int)set + ((int)sample << 8), out lastPlayed))
            {
                if (Math.Abs(Clock.Time - lastPlayed) < 40)
                {
                    return(null);
                }
            }
            lastPlayedTimes[(int)set + ((int)sample << 8)] = Clock.Time;

            Source src = Effect.LoadBuffer(buffer, volume);

            if (src == null)
            {
                return(null);
            }

            src.Play();

            if (sample > OsuSamples.PRELOAD_END)
            {
                src.Disposable = true;
            }

            return(src);
        }
Пример #2
0
        internal static int LoadSample(OsuSamples sample, SampleSet set = SampleSet.Soft)
        {
            int       buffer;
            SampleSet ss = SampleSet.None;

            switch (sample)
            {
            case OsuSamples.HitClap:
            case OsuSamples.HitFinish:
            case OsuSamples.HitNormal:
            case OsuSamples.HitWhistle:
            case OsuSamples.SliderTick:
            case OsuSamples.SliderSlide:
                ss = set;
                break;
            }

            if (!loadedSamples[(int)ss].TryGetValue(sample, out buffer))
            {
                string sampleName = sample.ToString().ToLower();
                string setName    = ss != SampleSet.None ? ss.ToString().ToLower() + "-" : string.Empty;

                bool oneShot = sample > OsuSamples.PRELOAD_END;

                if (Effect != null)
                {
                    buffer = Effect.Load("Skins/Default/" + setName + sampleName + ".wav");
                }
                if (!oneShot)
                {
                    loadedSamples[(int)ss].Add(sample, buffer);
                }

                return(buffer);
            }

            return(buffer);
        }