亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wavecontrol.cs

?? dsp6713設計重要資料
?? CS
字號:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

namespace AudioUtils
{
	/// <summary>
	/// Summary description for WaveControl.
	/// </summary>
	public class WaveControl : System.Windows.Forms.UserControl
	{
		/// <summary> 
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		/// <summary>
		/// This is the WaveFile class variable that describes the internal structures of the .WAV
		/// </summary>
		private WaveFile		m_Wavefile;

		/// <summary>
		/// Boolean for whether the .WAV should draw or not.  So that the control doesnt draw the .WAV until after it is read
		/// </summary>
		private bool			m_DrawWave = false;

		/// <summary>
		/// Filename string
		/// </summary>
		private string			m_Filename;

		/// <summary>
		/// Each pixel value (X direction) represents this many samples in the wavefile
		/// Starting value is based on control width so that the .WAV will cover the entire width.
		/// </summary>
		private double			m_SamplesPerPixel = 0.0;

		/// <summary>
		/// This value is the amount to increase/decrease the m_SamplesPerPixel.  This creates a 'Zoom' affect.
		/// Starting value is m_SamplesPerPixel / 25    so that it is scaled for the size of the .WAV
		/// </summary>
		private double			m_ZoomFactor;

		/// <summary>
		/// This is the starting x value of a mouse drag
		/// </summary>
		private int				m_StartX = 0;

		/// <summary>
		/// This is the ending x value of a mouse drag
		/// </summary>
		private int				m_EndX = 0;

		/// <summary>
		/// This is the value of the previous mouse move event
		/// </summary>
		private int				m_PrevX = 0;


		/// <summary>
		/// This boolean value gets rid of the currently active region and also refreshes the wave
		/// </summary>
		private bool			m_ResetRegion;

		/// <summary>
		/// Boolean for whether the Alt key is down
		/// </summary>
		private bool			m_AltKeyDown = false;

		/// <summary>
		/// Offset from the beginning of the wave for where to start drawing
		/// </summary>
		private int				m_OffsetInSamples = 0;

		public string Filename
		{
			set { m_Filename = value; }
			get { return m_Filename; }
		}

		private double SamplesPerPixel
		{
			set
			{
				m_SamplesPerPixel = value;
				m_ZoomFactor = m_SamplesPerPixel / 25;
			}
		}

		public WaveControl()
		{
			// This call is required by the Windows.Forms Form Designer.
			InitializeComponent();

			// sets up double buffering
			SetStyle(System.Windows.Forms.ControlStyles.UserPaint|System.Windows.Forms.ControlStyles.AllPaintingInWmPaint|System.Windows.Forms.ControlStyles.DoubleBuffer, true);
		}

		public void Read( )
		{
			m_Wavefile = new WaveFile( m_Filename );

			m_Wavefile.Read( );
			
			m_DrawWave = true;

			Refresh( );
		}

		/// <summary> 
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Component Designer generated code
		/// <summary> 
		/// Required method for Designer support - do not modify 
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			// 
			// WaveControl
			// 
			this.BackColor = System.Drawing.Color.SkyBlue;
			this.Name = "WaveControl";
			this.Size = new System.Drawing.Size(616, 328);
			this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.WaveControl_MouseUp);
			this.Paint += new System.Windows.Forms.PaintEventHandler(this.WaveControl_Paint);
			this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.WaveControl_KeyUp);
			this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.WaveControl_KeyDown);
			this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.WaveControl_MouseMove);
			this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.WaveControl_MouseDown);

		}
		#endregion

		private void WaveControl_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
		{
			Pen pen = new Pen( ForeColor );

			if ( m_DrawWave )
			{
				Draw( e, pen );
			}
			
			int regionStartX = Math.Min( m_StartX, m_EndX );
			int regionEndX = Math.Max( m_StartX, m_EndX );
			SolidBrush brush = new SolidBrush( Color.FromArgb( 128, 0, 0, 0 ) );
			e.Graphics.FillRectangle( brush, regionStartX, 0, regionEndX - regionStartX, e.Graphics.VisibleClipBounds.Height );
		}

		protected override void OnMouseWheel( MouseEventArgs mea )
		{
			if ( mea.Delta * SystemInformation.MouseWheelScrollLines / 120 > 0 )
				ZoomIn( );
			else
				ZoomOut( );

			Refresh( );
		}

		private void Draw( PaintEventArgs pea, Pen pen )
		{
			Graphics grfx = pea.Graphics;

			RectangleF visBounds = grfx.VisibleClipBounds;

			if ( m_SamplesPerPixel == 0.0 )
			{
				this.SamplesPerPixel = ( m_Wavefile.Data.NumSamples / visBounds.Width );
			}

			grfx.DrawLine( pen, 0, visBounds.Height / 2, visBounds.Width, visBounds.Height / 2 );

			grfx.TranslateTransform( 0, visBounds.Height );
			grfx.ScaleTransform( 1, -1 );

			if ( m_Wavefile.Format.BitsPerSample == 16 )
				Draw16Bit( grfx, pen, visBounds );
		}

		private void Draw16Bit( Graphics grfx, Pen pen, RectangleF visBounds )
		{
			int prevX = 0;
			int prevY = 0;

			int i = 0;

			// index is how far to offset into the data array
			int index = m_OffsetInSamples;
			int maxSampleToShow = (int) (( m_SamplesPerPixel * visBounds.Width ) + m_OffsetInSamples);

			maxSampleToShow = Math.Min( maxSampleToShow, m_Wavefile.Data.NumSamples );

			while ( index < maxSampleToShow )
			{
				short maxVal = -32767;
				short minVal = 32767;

				// finds the max & min peaks for this pixel 
				for ( int x = 0; x < m_SamplesPerPixel; x++ )
				{
					maxVal = Math.Max( maxVal, m_Wavefile.Data[ x + index ] );
					minVal = Math.Min( minVal, m_Wavefile.Data[ x + index ] );
				}

				// scales based on height of window
				int scaledMinVal = (int) (( (minVal + 32768) * visBounds.Height ) / 65536 );
				int scaledMaxVal = (int) (( (maxVal + 32768) * visBounds.Height ) / 65536 );

				//  if samples per pixel is small or less than zero, we are out of zoom range, so don't display anything
				if ( m_SamplesPerPixel > 0.0000000001 )
				{
					// if the max/min are the same, then draw a line from the previous position,
					// otherwise we will not see anything
					if ( scaledMinVal == scaledMaxVal )
					{
						if ( prevY != 0 )
							grfx.DrawLine( pen, prevX, prevY, i, scaledMaxVal );
					}
					else
					{
						grfx.DrawLine( pen, i, scaledMinVal, i, scaledMaxVal );
					}
				}
				else
					return;

				prevX = i;
				prevY = scaledMaxVal;
				
				i++;
				index = (int) ( i * m_SamplesPerPixel) + m_OffsetInSamples;
			}
		}

		private void ZoomIn( )
		{
			m_SamplesPerPixel -= m_ZoomFactor;
		}

		private void ZoomOut( )
		{
			m_SamplesPerPixel += m_ZoomFactor;
		}

		private void ZoomToRegion( )
		{
			int regionStartX = Math.Min( m_StartX, m_EndX );
			int regionEndX = Math.Max( m_StartX, m_EndX );

			// if they are negative, make them zero
			regionStartX = Math.Max( 0, regionStartX );
			regionEndX = Math.Max( 0, regionEndX );

			m_OffsetInSamples += (int) (regionStartX * m_SamplesPerPixel);

			int numSamplesToShow = (int) (( regionEndX - regionStartX ) * m_SamplesPerPixel);

			if ( numSamplesToShow > 0 )
			{
				this.SamplesPerPixel = (double) numSamplesToShow / this.Width;;

				m_ResetRegion = true;
			}
		}

		private void ZoomOutFull( )
		{
			this.SamplesPerPixel = ( m_Wavefile.Data.NumSamples / this.Width );
			m_OffsetInSamples = 0;

			m_ResetRegion = true;
		}

		private void Scroll( int newXValue )
		{
			m_OffsetInSamples -= (int) ( ( newXValue - m_PrevX ) * m_SamplesPerPixel );

			if ( m_OffsetInSamples < 0 )
				m_OffsetInSamples = 0;
		}

		private void WaveControl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			if ( e.Button == MouseButtons.Left )
			{
				if ( m_AltKeyDown )
				{
					m_PrevX = e.X;
				}
				else
				{
					m_StartX = e.X;
					m_ResetRegion = true;
				}
			}
			else if ( e.Button == MouseButtons.Right )
			{
				if ( e.Clicks == 2 )
					ZoomOutFull( );
				else
					ZoomToRegion( );
			}
		}

		private void WaveControl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			if ( e.Button == MouseButtons.Left )
			{
				if ( m_AltKeyDown )
				{
					Scroll( e.X );
				}
				else
				{
					m_EndX = e.X;
					m_ResetRegion = false;
				}

				m_PrevX = e.X;

				Refresh( );
			}
		}

		private void WaveControl_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			if ( m_AltKeyDown )
				return;

			if ( m_ResetRegion )
			{
				m_StartX = 0;
				m_EndX = 0;

				Refresh( );
			}
			else
			{
				m_EndX = e.X;
			}
		}

		private void WaveControl_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
		{
			if ( e.Alt )
			{
				m_AltKeyDown = true;
			}
		}

		private void WaveControl_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
		{
			if ( e.KeyCode == Keys.Menu )
			{
				m_AltKeyDown = false;
			}
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一区二区三区视频 | 欧美日韩国产成人在线免费| 国产一区二区伦理| 韩日av一区二区| 精品一区二区日韩| 国产一区二区三区四| 精品无码三级在线观看视频| 奇米影视在线99精品| 日本成人在线一区| 久88久久88久久久| 国产成人精品免费网站| 成人性生交大片免费看中文 | 日韩精品一区国产麻豆| 欧美大片顶级少妇| 国产日韩欧美不卡| 亚洲天堂网中文字| 亚洲成a人在线观看| 日本一区中文字幕| 国产一区二区三区不卡在线观看| 国产电影精品久久禁18| 9色porny自拍视频一区二区| 欧美综合一区二区| 日韩精品一区二区三区中文精品| 久久精品一区二区三区四区| 亚洲视频资源在线| 日本va欧美va瓶| 成人av先锋影音| 欧美色偷偷大香| 久久人人97超碰com| 亚洲视频一区二区免费在线观看 | 制服丝袜一区二区三区| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 亚洲免费av观看| 免费观看一级特黄欧美大片| 播五月开心婷婷综合| 欧美高清www午色夜在线视频| 久久品道一品道久久精品| 亚洲一区二区三区视频在线播放 | 国产老女人精品毛片久久| 99久久精品国产一区| 日韩一区二区精品| 国产精品家庭影院| 久久66热re国产| 欧美日韩日日夜夜| 亚洲天堂网中文字| 国产精品伊人色| 欧美人与性动xxxx| 亚洲乱码一区二区三区在线观看| 美女视频一区二区| 欧美私人免费视频| 亚洲色图一区二区三区| 久久成人免费日本黄色| 欧美日韩免费一区二区三区视频| 亚洲国产成人午夜在线一区| 免费视频最近日韩| 欧美三级乱人伦电影| 自拍偷在线精品自拍偷无码专区 | 99精品国产热久久91蜜凸| 精品日韩成人av| 日日嗨av一区二区三区四区| 91在线码无精品| 国产精品精品国产色婷婷| 国产麻豆一精品一av一免费 | 中文字幕免费不卡| 国模一区二区三区白浆| 日韩欧美高清一区| 免费成人深夜小野草| 欧美精品三级日韩久久| 亚洲成人av一区二区三区| 欧美性受xxxx| 午夜久久久影院| 欧美一级生活片| 免费高清不卡av| 精品免费日韩av| 国产伦理精品不卡| 国产人妖乱国产精品人妖| 精品一区二区三区影院在线午夜| 日韩欧美自拍偷拍| 国产一区二区成人久久免费影院 | 欧美高清一级片在线| 偷拍自拍另类欧美| 欧美一卡2卡3卡4卡| 久久精工是国产品牌吗| 久久香蕉国产线看观看99| 国产一区三区三区| 中文字幕成人av| 91丝袜高跟美女视频| 亚洲伊人伊色伊影伊综合网| 欧美日韩亚洲综合| 激情综合色播激情啊| 欧美激情中文字幕| 欧美网站大全在线观看| 日韩国产高清在线| 国产亚洲精品福利| 99久久99久久免费精品蜜臀| 亚洲一二三区在线观看| 欧美一区二区三区四区高清| 国产精品综合二区| 亚洲欧美另类在线| 日韩一区国产二区欧美三区| 国产一区二区三区日韩| 日本欧美一区二区在线观看| 久久免费看少妇高潮| 色狠狠一区二区三区香蕉| 日韩福利视频导航| 中文字幕av在线一区二区三区| 91首页免费视频| 奇米亚洲午夜久久精品| 亚洲国产精品成人久久综合一区 | 美女网站色91| 一区精品在线播放| 日韩欧美亚洲另类制服综合在线| 成人一区在线看| 日本欧美在线看| 亚洲人成小说网站色在线| 日韩午夜av电影| 91色在线porny| 久久66热re国产| 亚洲国产sm捆绑调教视频| 久久先锋影音av鲁色资源| 欧美三区在线观看| 懂色一区二区三区免费观看| 三级精品在线观看| 亚洲男帅同性gay1069| 欧美mv日韩mv国产网站app| 在线中文字幕一区二区| 国产成人精品aa毛片| 免费在线看成人av| 亚洲永久精品大片| 国产精品久久久久久久久快鸭| 日韩精品一区二区三区老鸭窝| 在线视频综合导航| www.亚洲在线| 国产精品1区2区| 九九精品视频在线看| 偷拍一区二区三区| 五月婷婷另类国产| 一个色综合av| 最新国产精品久久精品| 亚洲国产精品ⅴa在线观看| 久久免费偷拍视频| 2023国产精品自拍| 日韩一区二区三区高清免费看看| 欧美天堂亚洲电影院在线播放| 91蝌蚪porny成人天涯| 成人免费看片app下载| 国产精品乡下勾搭老头1| 韩国女主播一区二区三区| 老司机一区二区| 久久精品国产色蜜蜜麻豆| 捆绑紧缚一区二区三区视频 | 中日韩av电影| 国产人成一区二区三区影院| 久久噜噜亚洲综合| 久久精品一区二区三区四区| 久久久久免费观看| 久久只精品国产| 国产欧美精品一区二区色综合朱莉 | 亚洲午夜免费福利视频| 亚洲综合999| 日日夜夜精品视频免费| 日本在线观看不卡视频| 久草中文综合在线| 国产老妇另类xxxxx| 成人h动漫精品| 欧美午夜精品一区二区蜜桃| 欧美久久久久久蜜桃| 日韩欧美国产一区二区在线播放| 欧美精品一区二区三| 国产精品美女一区二区三区 | 欧美色精品在线视频| 91最新地址在线播放| 色婷婷亚洲精品| 亚洲激情第一区| 亚洲一区二区三区精品在线| 亚洲mv在线观看| 国产中文一区二区三区| 粉嫩av一区二区三区粉嫩| 一本色道久久综合精品竹菊| 欧美日韩久久久一区| 久久综合色播五月| 亚洲天堂2014| 秋霞影院一区二区| 成人理论电影网| 欧美一卡二卡在线观看| 国产人久久人人人人爽| 午夜久久久影院| 9人人澡人人爽人人精品| 欧美狂野另类xxxxoooo| 欧美国产一区二区| 亚洲成人av在线电影| 粗大黑人巨茎大战欧美成人| 欧美日韩一级视频| 欧美极品少妇xxxxⅹ高跟鞋 | 一区二区三区国产精品| 国内一区二区在线| 欧美午夜影院一区| 国产校园另类小说区| 男男gaygay亚洲| 欧美综合天天夜夜久久|