728x90
728x170
▶ MainForm.cs
using System;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Enumeration
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 재생 상태
/// <summary>
/// 재생 상태
/// </summary>
private enum PlayStatus
{
/// <summary>
/// 재생
/// </summary>
Play,
/// <summary>
/// 중단
/// </summary>
Stop,
/// <summary>
/// 중지
/// </summary>
Pause
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 미디어 플레이어
/// </summary>
private MediaPlayer.MediaPlayerClass mediaPlayer;
/// <summary>
/// 타이머
/// </summary>
private Timer timer;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
this.openFileDialog.RestoreDirectory = true;
this.openFileDialog.CheckPathExists = true;
this.openFileDialog.CheckFileExists = true;
this.openFileDialog.Filter = "MP3 파일(*.mp3)|*.mp3";
this.openFileDialog.FilterIndex = 1;
this.openFileDialog.DefaultExt = ".mp3";
this.timer = new Timer();
this.timer.Interval = 500;
this.timer.Tick += timer_Tick;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 타이머 틱 처리하기 - timer_Tick(sender, e)
/// <summary>
/// 타이머 틱 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void timer_Tick(object sender, EventArgs e)
{
this.positionTrackBar.Minimum = 0;
this.positionTrackBar.Maximum = (int)this.mediaPlayer.Duration;
this.positionTrackBar.Value = (int)this.mediaPlayer.CurrentPosition;
string currentPosition = TimeSpan.FromSeconds(this.mediaPlayer.CurrentPosition).ToString(@"hh\:mm\:ss");
string duration = TimeSpan.FromSeconds(this.mediaPlayer.Duration).ToString(@"hh\:mm\:ss");
this.positionLabel.Text = $"{currentPosition} / {duration}";
}
#endregion
#region MP3 파일 열기 버튼 클릭시 처리하기 - openButton_Click(sender, e)
/// <summary>
/// MP3 파일 열기 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void openButton_Click(object sender, EventArgs e)
{
if(this.openFileDialog.ShowDialog(this) == DialogResult.OK)
{
if(this.mediaPlayer == null)
{
this.mediaPlayer = new MediaPlayer.MediaPlayerClass();
}
this.mediaPlayer.FileName = this.openFileDialog.FileName;
this.mediaPlayer.Stop();
SetPlayStatusLabelData(PlayStatus.Stop);
this.filePathTextBox.Text = this.openFileDialog.FileName;
this.volumeTrackBar.Value = GetTrackBarValue(-1200, 0, this.mediaPlayer.Volume);
this.volumeLabel.Text = this.volumeTrackBar.Value.ToString();
}
}
#endregion
#region 재생 버튼 클릭시 처리하기 - playButton_Click(sender, e)
/// <summary>
/// 재생 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void playButton_Click(object sender, EventArgs e)
{
this.mediaPlayer.Play();
this.timer.Start();
SetPlayStatusLabelData(PlayStatus.Play);
}
#endregion
#region 중단 버튼 클릭시 처리하기 - stopButton_Click(sender, e)
/// <summary>
/// 중단 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void stopButton_Click(object sender, EventArgs e)
{
this.mediaPlayer.Stop();
this.timer.Stop();
SetPlayStatusLabelData(PlayStatus.Stop);
}
#endregion
#region 정지 버튼 클릭시 처리하기 - pauseButton_Click(sender, e)
/// <summary>
/// 정지 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void pauseButton_Click(object sender, EventArgs e)
{
this.mediaPlayer.Pause();
SetPlayStatusLabelData(PlayStatus.Pause);
}
#endregion
#region 볼륨 트랙바 스크롤시 처리하기 - volumeTrackBar_Scroll(sender, e)
/// <summary>
/// 볼륨 트랙바 스크롤시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void volumeTrackBar_Scroll(object sender, EventArgs e)
{
this.volumeLabel.Text = this.volumeTrackBar.Value.ToString();
int volumn = GetVolume(-1200, 0, this.volumeTrackBar.Value);
if(this.volumeTrackBar.Value == 0)
{
this.mediaPlayer.Mute = true;
}
else
{
this.mediaPlayer.Mute = false;
this.mediaPlayer.Volume = volumn;
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region 트랙바 값 구하기 - GetTrackBarValue(minimumVolume, maximumVolume, volume)
/// <summary>
/// 트랙바 값 구하기
/// </summary>
/// <param name="minimumVolume">최소 볼륨</param>
/// <param name="maximumVolume">최대 볼륨</param>
/// <param name="volume">볼륨</param>
/// <returns>트랙바 값</returns>
private int GetTrackBarValue(int minimumVolume, int maximumVolume, int volume)
{
double range = maximumVolume - minimumVolume;
double targetValue = volume - minimumVolume;
return (int)(targetValue / range * 100);
}
#endregion
#region 볼륨 구하기 - GetVolume(minimumValue, maximumValue, value)
/// <summary>
/// 볼륨 구하기
/// </summary>
/// <param name="minimumValue">최소값</param>
/// <param name="maximumValue">최대값</param>
/// <param name="value">값</param>
/// <returns>볼륨</returns>
private int GetVolume(int minimumValue, int maximumValue, int value)
{
double range = maximumValue - minimumValue;
double targetVolume = range * value / 100;
return (int)(targetVolume + minimumValue);
}
#endregion
#region 재생 상태 레이블 데이터 설정하기 - SetPlayStatusLabelData(playStatus)
/// <summary>
/// 재생 상태 레이블 데이터 설정하기
/// </summary>
/// <param name="playStatus">재생 상태</param>
private void SetPlayStatusLabelData(PlayStatus playStatus)
{
switch(playStatus)
{
case PlayStatus.Play : this.playStatusTextBox.Text = "재생"; break;
case PlayStatus.Stop : this.playStatusTextBox.Text = "중단"; break;
case PlayStatus.Pause : this.playStatusTextBox.Text = "정지"; break;
}
}
#endregion
}
}
728x90
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] Bitmap 클래스 : 비트맵 크기 변경하기 (0) | 2021.08.19 |
---|---|
[C#/WINFORM] Image 클래스 : Save 메소드를 사용해 JPEG 파일 저장하기 (0) | 2021.08.19 |
[C#/WINFORM] ImageCodecInfo 클래스 : GetImageEncoders 정적 메소드를 사용해 이미지 코덱 정보 구하기 (0) | 2021.08.19 |
[C#/WINFORM/.NET5] 누겟 설치 : System.Drawing.Common (0) | 2021.08.15 |
[C#/WINFORM/.NET5] C# 프로젝트 파일에서 비주얼 소스 세이프 태그 제거하기 (0) | 2021.08.01 |
[C#/WINFORM] SoundPlayer 클래스 : WAV 파일 재생하기 (0) | 2021.07.31 |
[C#/WINFORM] 화면 배율 계수 설정하기 (0) | 2021.07.03 |
[C#/WINFORM] Graphics 클래스 : GetHdc 메소드를 사용해 데스크톱 디바이스 컨텍스트 핸들 구하기 (0) | 2021.07.03 |
[C#/WINFORM] Graphics 클래스 : FromHwnd 정적 메소드를 사용해 데스크톱 Graphics 객체 구하기 (0) | 2021.07.03 |
[C#/WINFORM/.NET5] IProgress<T> 인터페이스 : Report 메소드를 사용해 비동기 작업시 진행 상태 보고하기 (0) | 2021.06.27 |