첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
------------------------------------------------------------------------------------------------------------------------------------------------------
728x90
728x170

TestProject.zip
0.00MB

▶ 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
그리드형(광고전용)
Posted by icodebroker
,