첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
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";

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            this.pauseButton.Enabled = false;
            this.stopButton.Enabled  = false;

            this.playButton.Click  += playButton_Click;
            this.pauseButton.Click += pauseButton_Click;
            this.stopButton.Click  += stopButton_Click;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 웨이브 출력 이벤트 재생 중단시 처리하기 - waveOutEvent_PlaybackStopped(sender, e)

        /// <summary>
        /// 웨이브 출력 이벤트 재생 중단시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void waveOutEvent_PlaybackStopped(object sender, StoppedEventArgs e)
        {
            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)
        {
            if(this.audioFileReader == null)
            {
                this.audioFileReader = new AudioFileReader(this.audioFilePath);
            }

            if(this.waveOutEvent == null)
            {
                this.waveOutEvent = new WaveOutEvent();

                this.waveOutEvent.Init(this.audioFileReader);

                this.waveOutEvent.PlaybackStopped += waveOutEvent_PlaybackStopped;
            }

            if(this.waveOutEvent.PlaybackState == PlaybackState.Playing)
            {
                return;
            }

            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)
        {
            if(this.waveOutEvent == null)
            {
                return;
            }

            if(this.waveOutEvent.PlaybackState == PlaybackState.Paused)
            {
                return;
            }

            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)
        {
            if(this.waveOutEvent == null)
            {
                return;
            }

            if(this.waveOutEvent.PlaybackState == PlaybackState.Stopped)
            {
                return;
            }

            this.waveOutEvent.Stop();

            this.playButton.Enabled  = true;
            this.pauseButton.Enabled = false;
            this.stopButton.Enabled  = false;
        }

        #endregion
    }
}

※ 적당한 mp3 파일을 해당 위치에 복사하고 실행한다.

728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요