Exemple #1
0
        // only used for deserializing
        public XSID(sidPlayer player, BinaryReader reader, EventList events)
            : base()
        {
            this.events = events;

            this.m_player = player;

            LoadFromReader(player.m_scheduler, reader);

            if (xsidEvent_id == -1)
            {
                xsidEvent = null;
            }
            else
            {
                xsidEvent = events.GetEventById(xsidEvent_id) as xSIDEvent;

#if DEBUG
                if (xsidEvent == null)
                {
                    throw new Exception("XSID: xSIDEvent not found");
                }
#endif
            }
        }
Exemple #2
0
 public void Dispose()
 {
     Stop();
     wavePlayer?.Dispose();
     sidTune = null;
     player  = null;
 }
Exemple #3
0
 // only used for deserializing
 public EventScheduler(sidPlayer player, BinaryReader reader, int id)
     : base(string.Empty)
 {
     m_id     = id;
     m_player = player;
     LoadFromReader(reader);
 }
Exemple #4
0
        public sidPlayAudioCore(byte[] sidFileBytes, int sampleRate = 44100, int channels = 2)
        {
            try
            {
                sidTune = new SidTune(new MemoryStream(sidFileBytes));
                sidTune.selectSong(0);
            }
            catch (Exception ex)
            {
                throw new AudioEngineException(0, "[sidPlayAudioCore] Exception when loading the tune...", ex);
            }

            player = new sidPlayer();

            Title     = sidTune.Info.InfoString1;
            Author    = sidTune.Info.InfoString2;
            Copyright = sidTune.Info.InfoString3;

            var tmpTuneLoaded = player.load(sidTune);

            IsTuneLoaded = tmpTuneLoaded == 0;
            IsTuneFaulty = tmpTuneLoaded == -2;

            var sidCfg = player.config();

            sidCfg.clockForced  = false;
            sidCfg.clockSpeed   = SID2Types.sid2_clock_t.SID2_CLOCK_CORRECT;
            sidCfg.clockDefault = SID2Types.sid2_clock_t.SID2_CLOCK_CORRECT;
            sidCfg.frequency    = sampleRate;
            sidCfg.playback     =
                channels != 1 ? SID2Types.sid2_playback_t.sid2_stereo : SID2Types.sid2_playback_t.sid2_mono;
            sidCfg.precision = 16;

            sidCfg.sidModel      = SID2Types.sid2_model_t.SID2_MODEL_CORRECT;
            sidCfg.sidDefault    = SID2Types.sid2_model_t.SID2_MODEL_CORRECT;
            sidCfg.sidSamples    = true;
            sidCfg.environment   = SID2Types.sid2_env_t.sid2_envR;
            sidCfg.forceDualSids = false;
            sidCfg.optimisation  = 2;

            if (player.config(sidCfg) != 0)
            {
                Dispose();
                return;
            }

            try
            {
                wavePlayer = new WaveOut();
                wavePlayer.Init(new sidWaveOut(sampleRate, channels, player));
            }
            catch (NAudio.MmException ex)
            {
                throw new AudioEngineException(0, "[sidPlayAudioCore] NAudio initialization exception!", ex);
            }

            IsPlaying = false;
            IsPaused  = false;
        }
Exemple #5
0
 public SID6526(sidPlayer player)
 {
     m_player       = player;
     m_eventContext = m_player.m_scheduler;
     m_phase        = event_phase_t.EVENT_CLOCK_PHI1;
     rnd            = 0;
     m_taEvent      = new CiaEvent(this);
     clock(0xffff);
     reset(false);
 }
Exemple #6
0
        public SID6510(EventScheduler context, sidPlayer owner, BinaryReader reader, EventList events)
            : base(context, owner, reader, events)
        {
            delayCycle.func = new ProcessorCycle.FunctionDelegate(sid_delay);

            if (procCycle_id == 2)
            {
                procCycle = new ProcessorCycle[] { delayCycle };
            }
        }
Exemple #7
0
        public SID6510(EventScheduler context, sidPlayer owner)
            : base(context, owner)
        {
            m_mode      = SID2Types.sid2_env_t.sid2_envR;
            m_framelock = false;

            // The hacks for de.quippy.sidplay.sidplay are done with overridden methods of MOS6510

            // Used to insert busy delays into the CPU emulation
            delayCycle.func = new ProcessorCycle.FunctionDelegate(sid_delay);
        }
Exemple #8
0
        public XSID(sidPlayer player, SIDEmu sid)
            : base()
        {
            xsidEvent  = new xSIDEvent(this);
            ch4        = new Channel("CH4", player.m_scheduler, this);
            ch5        = new Channel("CH5", player.m_scheduler, this);
            muted      = (false);
            suppressed = (false);
            wasRunning = (false);
            sidSamples(true);

            m_player = player;
            m_sid    = sid;
            m_gain   = 100;
        }
Exemple #9
0
        // only used for deserializing
        public SID6526(sidPlayer player, BinaryReader reader, EventList events)
        {
            m_player       = player;
            m_eventContext = m_player.m_scheduler;

            LoadFromReader(reader);

            m_taEvent       = events.GetEventById(m_taEvent_id) as CiaEvent;
            m_taEvent.m_cia = this;

#if DEBUG
            if (m_taEvent == null)
            {
                throw new Exception("SID6526: CiaEvent not found");
            }
#endif
        }
Exemple #10
0
        // Must lock the SID before using the standard functions

        /// <summary>
        /// Set execution environment and lock sid to it
        /// </summary>
        /// <param name="player"></param>
        /// <returns></returns>
        public bool _lock(sidPlayer player)
        {
            if (player == null)
            {
                if (!m_locked)
                {
                    return(false);
                }
                m_locked  = false;
                m_context = null;
            }
            else
            {
                if (m_locked)
                {
                    return(false);
                }
                m_locked  = true;
                m_context = player.m_scheduler;
            }
            return(true);
        }
Exemple #11
0
 public EventMixer(sidPlayer player)
     : base("Mixer")
 {
     m_player = player;
 }
Exemple #12
0
 public C64cia1(sidPlayer player)
     : base(player.m_scheduler)
 {
     m_player = (player);
 }
Exemple #13
0
 public C64cia2(sidPlayer player)
     : base(player.m_scheduler)
 {
     m_player = player;
 }
Exemple #14
0
 // only used for deserializing
 public C64cia2(sidPlayer player, BinaryReader reader, EventList events)
     : base(player.m_scheduler, reader, events)
 {
     m_player = player;
 }
Exemple #15
0
        // deserializing
        protected void LoadFromReader(sidPlayer player, EventScheduler context, BinaryReader reader)
        {
            int count = reader.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                int             id  = reader.ReadInt32();
                Event.EventType typ = (Event.EventType)reader.ReadInt16();
                switch (typ)
                {
                case Event.EventType.ciaEvt:
                    this.Add(new CiaEvent(context, reader, id));
                    break;

                case Event.EventType.cpuEvt:
                    this.Add(new CPUEvent(context, reader, id));
                    break;

                case Event.EventType.GalwayEvt:
                    this.Add(new GalwayEvent(context, reader, id));
                    break;

                case Event.EventType.mixerEvt:
                    this.Add(new EventMixer(player, context, reader, id));
                    break;

                case Event.EventType.RtcEvt:
                    this.Add(new EventRTC(context, reader, id));
                    break;

                case Event.EventType.SampleEvt:
                    this.Add(new SampleEvent(context, reader, id));
                    break;

                case Event.EventType.TaEvt:
                    this.Add(new EventTa(context, reader, id));
                    break;

                case Event.EventType.TbEvt:
                    this.Add(new EventTb(context, reader, id));
                    break;

                case Event.EventType.TimeWarpEvt:
                    this.Add(new EventTimeWarp(context, reader, id));
                    break;

                case Event.EventType.TodEvt:
                    this.Add(new EventTod(context, reader, id));
                    break;

                case Event.EventType.vicEvt:
                    this.Add(new C64VIC(context.m_player, reader, id));
                    break;

                case Event.EventType.xSidEvt:
                    this.Add(new xSIDEvent(context, reader, id));
                    break;

                default:
#if DEBUG
                    throw new Exception("EventList.LoadFromReader: unknown Event id");
#else
                    break;
#endif
                }
            }

            context.m_next = GetEventById(context.m_next_id);
            context.m_prev = GetEventById(context.m_prev_id);

            foreach (Event ev in this)
            {
                ev.m_next = GetEventById(ev.m_next_id, context);
                ev.m_prev = GetEventById(ev.m_prev_id, context);

#if DEBUG
                if (ev.m_next_id > -1 && ev.m_next == null)
                {
                    throw new Exception("EventList.LoadFromReader: next Event id not found: " + ev.m_next_id.ToString());
                }
                if (ev.m_prev_id > -1 && ev.m_prev == null)
                {
                    throw new Exception("EventList.LoadFromReader: prev Event id not found: " + ev.m_prev_id.ToString());
                }
#endif
            }
        }
Exemple #16
0
 // only used for deserializing
 public EventList(sidPlayer player, EventScheduler context, BinaryReader reader)
     : base()
 {
     LoadFromReader(player, context, reader);
 }
Exemple #17
0
 public sidWaveOut(int sampleRate, int channels, sidPlayer player)
 {
     WaveFormat = new WaveFormat(sampleRate, 16, channels);
     p          = player;
 }
Exemple #18
0
 // only used for deserializing
 public EventMixer(sidPlayer player, EventScheduler context, BinaryReader reader, int newId)
     : base(context, reader, newId)
 {
     m_player = player;
 }
Exemple #19
0
 // only used for deserializing
 public C64VIC(sidPlayer player, BinaryReader reader, int newid)
     : base(player.m_scheduler, reader, newid)
 {
     m_player = player;
 }