///<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(); }
///<summary> ///</summary> ///<param name="buffer"></param> ///<param name="count"></param> ///<returns></returns> public int GetBytes(byte[] buffer, int count) { if (IsPlaying) { var c = ChannelsMixer.VC_WriteBytes((sbyte[])(Array)buffer, count); CurrentBytesWindow = buffer; return(c); } return(0); }
/// /// <summary> * @since 29.09.2007 </summary> /// * <param name="sourceDataLine"> </param> /// * <param name="sampleBufferSize"> </param> /// public virtual void initializeProcessor(ChannelsMixer mixer) { this.channels = mixer.MixCfg.Style == SharpMod.Player.RenderingStyle.Mono ? 1 : 2; //this.sampleBufferSize = sourceDataLine.BufferSize; //this.sampleBufferSize = mixer.VC_TICKBUF.Length; this.sampleBuffer = new int[this.sampleBufferSize]; this.currentWritePosition = 0; this.internalFramePosition = 0; this.useInternalCounter = false; }
///<summary> /// Start playing the loaded song module ///</summary> ///<exception cref="SharpModException"></exception> public void Start() { if (SoundRenderer == null) { throw new SharpModException("No renderer"); } if (!IsPlaying) { IsPlaying = true; ChannelsMixer.VC_PlayStart(); SoundRenderer.PlayStart(); } }
///<summary> /// Stop the currently playing song module ///</summary> ///<exception cref="SharpModException"></exception> public void Stop() { if (SoundRenderer == null) { throw new SharpModException("No renderer"); } if (IsPlaying) { IsPlaying = false; Pause(); ChannelsMixer.VC_PlayStop(); SoundRenderer.PlayStop(); } }