public static void Stop() { musicplaying = false; if (ffccMusic != null) { ffccMusic.Dispose(); ffccMusic = null; } cancelTokenSource?.Cancel(); #if !_X64 if (dm_Midi != null) { dm_Midi.Stop(); } #else fluid_Midi?.Stop(); #endif }
private static AV.Audio ffccMusic = null; // testing using class to play music instead of Naudio / Nvorbis public static void Play(ushort?index = null, float volume = 0.5f, float pitch = 0.0f, float pan = 0.0f, bool loop = true) { Memory.MusicIndex = index ?? Memory.MusicIndex; if (musicplaying && lastplayed == Memory.MusicIndex) { return; } string ext = ""; if (Memory.dicMusic.Count > 0 && Memory.dicMusic[(MusicId)Memory.MusicIndex].Count > 0) { ext = Path.GetExtension(Memory.dicMusic[(MusicId)Memory.MusicIndex][0]).ToLower(); } else { return; } string filename = Memory.dicMusic[(MusicId)Memory.MusicIndex][0]; Stop(); switch (ext) { case ".ogg": case ".wav": case ".mp3": default: //ffccMusic = new Ffcc(@"c:\eyes_on_me.wav", AVMediaType.AVMEDIA_TYPE_AUDIO, Ffcc.FfccMode.STATE_MACH); if (ffccMusic != null) { ffccMusic?.Dispose(); ffccMusic = null; } if (!ZZZ) { ffccMusic = AV.Audio.Load(filename, loop ? 0 : -1); if (!loop) { ffccMusic.LOOPSTART = -1; } if (Memory.Threaded) { ffccMusic.PlayInTask(volume, pitch, pan); } else { ffccMusic.Play(volume, pitch, pan); } } else { return; //cancelTokenSource = new CancellationTokenSource(); //cancelToken = cancelTokenSource.Token; //MusicTask = Task.Run(()=>PlayInTask(ref ffccMusic,volume, pitch, pan, loop, filename,cancelToken), cancelToken); } break; case ".sgt": #if _X64 || !_WINDOWS if (fluid_Midi == null) { fluid_Midi = new AV.Midi.Fluid(); } fluid_Midi.ReadSegmentFileManually(filename); fluid_Midi.Play(); #else if (dm_Midi == null) { dm_Midi = new AV.Midi.DirectMedia(); } dm_Midi.Play(filename, loop); #endif break; } musicplaying = true; lastplayed = Memory.MusicIndex; }