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