Ejemplo n.º 1
0
        ///<summary>
        ///</summary>
        ///<param name="module"></param>
        public ModulePlayer(SongModule module)
        {
            _uniTrk = new UniTrk();
            _uniTrk.UniInit();
            CurrentModule     = module;
            WaveTableInstance = new WaveTable();
            PlayerInstance    = new SharpModPlayer(_uniTrk);
            MixCfg            = new MixConfig {
                Is16Bits = true, Style = RenderingStyle.Stereo, Rate = 48000
            };
            ChannelsMixer = new ChannelsMixer(MixCfg /* DMode.DMODE_16BITS | DMode.DMODE_STEREO*/);
            //this.ChannelsMixer.MixFreq = 48000;
            ChannelsMixer.ChannelsCount  = module.ChannelsCount;
            ChannelsMixer.OnTickHandler += PlayerInstance.MP_HandleTick;
            ChannelsMixer.OnBPMRequest  += delegate { return(PlayerInstance.mp_bpm); };
            ChannelsMixer.WaveTable      = WaveTableInstance;

            PlayerInstance.MP_Init(CurrentModule);
            PlayerInstance._mixer           = ChannelsMixer;
            PlayerInstance.SpeedConstant    = 1.0f;
            PlayerInstance.mp_volume        = 100;
            PlayerInstance.mp_bpm           = 125;
            PlayerInstance.OnUpdateUI      += PlayerInstance_OnUpdateUI;
            PlayerInstance.OnCurrentModEnd += new CurrentModEndHandler(PlayerInstance_OnCurrentModEnd);

            InitWaveTable();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Refresh the UniTrk Stream from the Track
        /// </summary>
        /// <param name="track"></param>
        internal short[] ToUniTrk(Track track)
        {
            lock (locker)
            {
                UniTrk trk = new UniTrk();

                //trk.UniReset();
                trk.UniInit();
                trk.UniReset();
                //int n_ptr = offset;
                foreach (PatternCell pc in track.Cells)
                {
                    if (pc == null)
                    {
                        continue;
                    }
                    if (pc.Instrument != 0)
                    {
                        trk.UniInstrument((short)(pc.Instrument));
                    }

                    if (pc.Period != 0 && pc.Note != null)
                    {
                        trk.UniNote((short)(pc.Period));
                    }

                    if (pc.Effect > 0)
                    {
                        trk.UniPTEffect((short)(pc.Effect /*- 3*/), pc.EffectData);
                    }

                    trk.UniNewline();
                }

                return(trk.UniDup());
            }
            //track.UniModSong.Tracks[track.TrackNumber + (track.PatternNumber * track.UniModSong.NumChn)] = trk.UniDup();
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Initialize internals variables
 /// </summary>
 private void Init()
 {
     _uniTrack = new UniTrk();
     _samples  = new List <byte[]>();
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Decode the UniTrk Stream from the Track
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        internal void fromUniTrk(Track track)
        {
            lock (locker)
            {
                UniTrk trk = new UniTrk();

                List <PatternCell> lpc = new List <PatternCell>();
                for (int r = 0; r < track.Cells.Count; r++)
                {
                    // Avoid if unitrack is empty
                    if (track.UniTrack.Length > 0)
                    {
                        int f = trk.UniFindRow(track.UniTrack, r);
                        trk.UniSetRow(track.UniTrack, f);
                    }

                    Effects c;
                    short   note       = 0;
                    int?    RealNote   = null;
                    short   inst       = -1;
                    short   effect     = 3;
                    short   effectData = 0;
                    int?    octave     = null;
                    while ((c = (Effects)trk.UniGetByte()) != 0)
                    {
                        switch (c)
                        {
                        case Effects.UNI_NOTE:
                            note = trk.UniGetByte();
                            if (note != 96)
                            {
                                short n = (short)((note) % 12);
                                short o = (short)(note / 12);
                                RealNote = n;
                                octave   = o;
                            }

                            break;

                        case Effects.UNI_INSTRUMENT:
                            inst = trk.UniGetByte();
                            //if (inst >= uniMod.NumIns)
                            //break; /* <- safety valve */

                            break;

                        default:
                            effect     = (short)c;
                            effectData = trk.UniGetByte();
                            break;
                        }
                    }

                    PatternCell pc = new PatternCell(track);
                    pc.Period     = (short)note;
                    pc.Note       = RealNote;
                    pc.Octave     = octave;
                    pc.Instrument = (short)(inst + 1);
                    pc.Effect     = (short)(effect - 3);
                    pc.EffectData = (short)effectData;
                    lpc.Add(pc);
                }

                track.Cells = lpc;
            }
        }