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); }
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); }