コード例 #1
0
ファイル: ModulePlayer.cs プロジェクト: VRDate/sharpmod
        ///<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();
        }
コード例 #2
0
ファイル: ModuleLoader.cs プロジェクト: VRDate/sharpmod
        /// <summary>
        /// Load header of the module with the best loader
        /// </summary>
        /// <param name="module">Module to fill</param>
        /// <returns>true if success</returns>
        private bool LoadHeader(SongModule module)
        {
            var toReturn = false;

            _currentLoader = null;
            foreach (var loader in Loaders)
            {
                //Reset the reader
                _reader.Rewind();
                loader.Reader = _reader;
                if (loader.Test())
                {
                    _currentLoader = loader;
                    break;
                }
            }

            // Loader not found...
            if (null == _currentLoader)
            {
                throw new SharpModException(SharpModExceptionResources.ERROR_NOT_A_MODULE);
            }

            if (!_uniTrack.UniInit())
            {
                return(false);
            }

            _currentLoader.UniTrack = _uniTrack;

            // init module loader
            if (_currentLoader.Init(module))
            {
                _reader.Rewind();
                toReturn = _currentLoader.Load();
            }

            // free unitrk allocations
            _uniTrack.UniCleanup();

            return(toReturn);
        }
コード例 #3
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();
        }