728x90
728x170
▶ MainForm.cs
using System;
using System.Windows.Forms;
using NAudio.Wave;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 오디오 파일 리더
/// </summary>
private AudioFileReader audioFileReader;
/// <summary>
/// 웨이브 출력 이벤트
/// </summary>
private WaveOutEvent waveOutEvent;
/// <summary>
/// 오디오 파일 경로
/// </summary>
private string audioFilePath = @"d:\sample.mp3";
/// <summary>
/// 종료 여부
/// </summary>
private bool closing = false;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
this.audioFileReader = new AudioFileReader(this.audioFilePath);
this.waveOutEvent = new WaveOutEvent();
this.waveOutEvent.Init(this.audioFileReader);
this.pauseButton.Enabled = false;
this.stopButton.Enabled = false;
this.volumeTrackBar.Value = (int)(this.waveOutEvent.Volume * 100);
FormClosing += Form_FormClosing;
this.waveOutEvent.PlaybackStopped += waveOutEvent_PlaybackStopped;
this.playButton.Click += playButton_Click;
this.pauseButton.Click += pauseButton_Click;
this.stopButton.Click += stopButton_Click;
this.volumeTrackBar.ValueChanged += volumeTrackBar_ValueChanged;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 폼을 닫을 경우 처리하기 - Form_FormClosing(sender, e)
/// <summary>
/// 폼을 닫을 경우 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
this.closing = true;
this.waveOutEvent.Stop();
}
#endregion
#region 웨이브 출력 이벤트 재생 중단시 처리하기 - waveOutEvent_PlaybackStopped(sender, e)
/// <summary>
/// 웨이브 출력 이벤트 재생 중단시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void waveOutEvent_PlaybackStopped(object sender, StoppedEventArgs e)
{
if(this.closing)
{
this.waveOutEvent.Dispose();
this.waveOutEvent = null;
this.audioFileReader.Dispose();
this.audioFileReader = null;
}
}
#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.waveOutEvent.Play();
this.playButton.Enabled = false;
this.pauseButton.Enabled = true;
this.stopButton.Enabled = true;
}
#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.waveOutEvent.Pause();
this.playButton.Enabled = true;
this.pauseButton.Enabled = false;
this.stopButton.Enabled = false;
}
#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.waveOutEvent.Stop();
this.audioFileReader.Position = 0;
this.playButton.Enabled = true;
this.pauseButton.Enabled = false;
this.stopButton.Enabled = false;
}
#endregion
#region 볼륨 트랙바 값 변경시 처리하기 - volumeTrackBar_ValueChanged(sender, e)
/// <summary>
/// 볼륨 트랙바 값 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void volumeTrackBar_ValueChanged(object sender, EventArgs e)
{
TrackBar trackBar = sender as TrackBar;
this.waveOutEvent.Volume = trackBar.Value / 100f;
}
#endregion
}
}
※ 적당한 mp3 파일을 해당 위치에 복사하고 실행한다.
728x90
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] MethodInvoker 대리자 : 크로스 스레드(Cross Thread) 처리하기 (0) | 2021.12.31 |
---|---|
[C#/WINFORM/.NET5] 웹 페이지에서 프로그램 실행하기 (0) | 2021.12.31 |
[C#/WINFORM/.NET5] 웨이브 폼 렌더링 사용하기 (0) | 2021.12.29 |
[C#/WINFORM/.NET5] WasapiLoopbackCapture 클래스 : 사운드 카드 출력을 WAV 파일로 레코딩하기 (0) | 2021.12.28 |
[C#/WINFORM/.NET5] WaveInEvent 클래스 : WAV 파일 레코딩하기 (0) | 2021.12.28 |
[C#/WINFORM/.NET5] WaveOutEvent 클래스 : 오디오 파일 재생하기 (기능 개선) (0) | 2021.12.26 |
[C#/WINFORM/.NET5] WaveOutEvent 클래스 : 오디오 파일 재생하기 (0) | 2021.12.26 |
[C#/WINFORM/.NET5] 마이크 입력 스펙트로그램 표시하기 (0) | 2021.12.18 |
[C#/WINFORM] 사운드 필터링 사용하기 (0) | 2021.12.09 |
[C#/WINFORM] NativeWindow 클래스 : 마우스 캡처 변경시 이벤트 전달하기 (0) | 2021.12.06 |