티스토리 뷰

======================================================

안녕하세요 Doridori 입니다.


이번에 드디어 해외 출장에 이은 진천 생활이 마무리 되었습니다. 


이래저래 합치니 1년의 시간이네요.


간만에 휴가를 얻었는데 가족과 시간도 보내고 밀린 강의도 만들고 보내고 있습니다. ^^;;


앞으로 또 다시 새로운 시작을 해야 하기 때문에 빠른 업데이트는 힘들것 같기는 하지만 


항상 그렇듯 늦어도 꾸준히 업데이트 하도록 하겠습니다. 


개발에 뜻을 가지시는 분들께 도움이 될 수 있는 내용 이었으면 합니다.


화이팅!!!!

======================================================




47.Sound 제어 하기 (Beep, WAV, MP3)

 

 

Source UI) Study_47_Sound 제어 하기 (Beep, WAV, MP3) (UI).zip

Soruce 전체) Study_47_Sound 제어 하기 (Beep, WAV, MP3).zip

교재) 47.Sound 제어 하기 (Beep, WAV, MP3).pdf

wav Sample) 

Mp3 Sample) 











드디어 Sound 에 대한 내용 입니다. 


뭔가 중요한 기능이기는 하지만 생각보다 관련 직종이 아닐 경우 자주 사용 되는 기능이 아니라 에메한 느낌의 기능 입니다. 


실제 업무를 할 때 소리에 집중해서 코딩하게 되는 경우가 많지는 않습니다. ㅎ


나만의 MP3 Player를 만든다는 느낌으로 사용하면 좋을 듯 하지만 워낙 좋은 Player 들이 많기 때문에 . . . 


그래도 소리가 아쉬울 때라던지 필요 할 때가 있기 때문에 다룰 수 있으면 좋지 않을까 생각 합니다. 




UI)


매우 간단하게 사용 가능 한 System Sound와 WAV 재생 기능의 경우 가볍게 다루고 Mp3 Player의 경우 조금 더 자세하게 다루었습니다. 

(기능이 더 많기 때문에 ^^;;)


그리고 System Sound와 WAV의 경우 같은 기능이라고 봐도 될듯 합니다. ^^;;






강의)


강의를 올리다 보니 너무 긴듯한 느낌이어서 


이번 강의는 초반 내용 설명, System Sound, WAV를 한강의로 하고 


MP3 Player를 한강의로 분리 하였습니다. 


(위에 올렸다시피 1강을 업데이트 하고 2강은 주말 쯤에 업데이트 할 예정 입니다.)


(지난번에 소리가 너무 작다고 하셔서 키웠는데 괜찮은지 모르겠습니다. ^^;;;)



(Sound 제어 (1))




(Sound 제어 (2))







Source)


아낌 없이~ Full Source Update 합니다. ^^ 

강의가 업데이트 되면 함께 보셔도 좋을듯 하지만 그냥 보고 따라해 보셔도 좋을 듯 합니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using SM = System.Media;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace SoundPlayer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            _tm = new Timer();
        }
 
 
 
        #region SystemSound
 
 
        /// <summary>
        /// Window System Beep 음을 재생
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnBeep_Click(object sender, EventArgs e)
        {
            if (rdoBeep1.Checked)
            {
                SM.SystemSounds.Asterisk.Play();
            }
            else if (rdoBeep2.Checked)
            {
                SM.SystemSounds.Beep.Play();
            }
            else if (rdoBeep3.Checked)
            {
                SM.SystemSounds.Exclamation.Play();
            }
            else if (rdoBeep4.Checked)
            {
                SM.SystemSounds.Hand.Play();
            }
            else if (rdoBeep5.Checked)
            {
                SM.SystemSounds.Question.Play();
            }
        }
 
 
 
 
        #endregion
 
 
 
 
        #region WAV
 
        SM.SoundPlayer _soundPlay;
 
 
        /// <summary>
        /// WAV 파일을 불러오기 위한 OpenFile Dialog
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnWAV_Click(object sender, EventArgs e)
        {
            string strFilePath = string.Empty;
 
            OFDialog.InitialDirectory = Application.StartupPath;   //프로그램 실행 파일 위치
            OFDialog.FileName = "*.wav";
            OFDialog.Filter = "wav files (*.wav)|*.wav|All files (*.*)|*.*";
 
            if (OFDialog.ShowDialog() == DialogResult.OK)
            {
                PlayWaveFile(OFDialog.FileName, true);
            }
        }
 
 
        /// <summary>
        /// WAV File 재생
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="playLooping"></param>
        private void PlayWaveFile(string filePath, bool playLooping)
        {
            if (_soundPlay != null)
            {
                _soundPlay.Stop();
                _soundPlay.Dispose();
                _soundPlay = null;
            }
 
            if (string.IsNullOrWhiteSpace(filePath))
            {
                return;
            }
 
            _soundPlay = new SM.SoundPlayer(filePath);
 
            if (playLooping)
            {
                _soundPlay.PlayLooping();
            }
            else
            {
                _soundPlay.Play();
            }
        }
        
        #endregion
 
 
 
 
        #region MP3
 
        Timer _tm;
        MediaPlayer.MediaPlayerClass _mediaPlayer;
 
        // 상태 표시를 위한 Enum
        enum EnumStatus
        {
            Play,
            Stop,
            Pause,
        }
 
        /// <summary>
        /// MP3 파일을 불러오기 위한 OpenFile Dialog
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnMP3_Click(object sender, EventArgs e)
        {
            string strFilePath = string.Empty;
 
            OFDialog.InitialDirectory = Application.StartupPath;   //프로그램 실행 파일 위치
            OFDialog.FileName = "*.mp3";
            OFDialog.Filter = "mp3 files (*.mp3)|*.mp3|All files (*.*)|*.*";
 
            if (OFDialog.ShowDialog() == DialogResult.OK)
            {
                if (_mediaPlayer == null)
                {
                    _mediaPlayer = new MediaPlayer.MediaPlayerClass();
                }
 
                _mediaPlayer.FileName = OFDialog.FileName;
                _mediaPlayer.Stop();
                changeStatus(EnumStatus.Stop);
                lblFileName.Text = OFDialog.FileName;
 
                tbarVolume.Value = TrackbarToVolume(-12000, _mediaPlayer.Volume);
                lblVolume.Text = tbarVolume.Value.ToString();
 
                _tm.Interval = 500;
                _tm.Tick += _tm_Tick;
            }
        }
 
 
        /// <summary>
        /// 진행 상태를 실시간으로 표시하기 위한 Timer
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _tm_Tick(object sender, EventArgs e)
        {
            tbarMain.Minimum = 0;
            tbarMain.Maximum = (int)_mediaPlayer.Duration;    // MP3 File의 전체 재생 시간 (int)
            tbarMain.Value = (int)_mediaPlayer.CurrentPosition;   // MP3 File의 현재 재생 위치
 
            string strCurrentTime = TimeSpan.FromSeconds(_mediaPlayer.CurrentPosition).ToString(@"hh\:mm\:ss");
            string strFullTime = TimeSpan.FromSeconds(_mediaPlayer.Duration).ToString(@"hh\:mm\:ss");
 
            lblTime.Text = $"{strCurrentTime} / {strFullTime}";
 
            //tbarVolume.Value = TrackbarToVolume(-1200, 0, _mediaPlayer.Volume);
            //lblVolume.Text = tbarVolume.Value.ToString();
        }
 
 
 
        /// <summary>
        /// 진행 버튼을 눌렀을때 발생 하는 Event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPlay_Click(object sender, EventArgs e)
        {
            _mediaPlayer.Play();
            _tm.Start();
            changeStatus(EnumStatus.Play);
        }
 
 
        /// <summary>
        /// 정지 버튼을 눌렀을때 발생 하는 Event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnStop_Click(object sender, EventArgs e)
        {
            _mediaPlayer.Stop();
            _tm.Stop();
            changeStatus(EnumStatus.Stop);
        }
 
 
        /// <summary>
        /// 멈춤 버튼을 눌렀을때 발생하는 Event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPause_Click(object sender, EventArgs e)
        {
            _mediaPlayer.Pause();
            changeStatus(EnumStatus.Pause);
        }
 
 
        /// <summary>
        /// 상태가 변경 되었을 때 상태 값을 표기
        /// </summary>
        /// <param name="eStatus"></param>
        private void changeStatus(EnumStatus eStatus)
        {
            lblStatus.Text = eStatus.ToString();
        }
 
 
 
        /// <summary>
        /// tbar의 값을 변경 할때 mediaPlayer의 볼륨 값을 적용 시킴
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tbarVolume_Scroll(object sender, EventArgs e)
        {
            lblVolume.Text = tbarVolume.Value.ToString();
 
            int iVolumn = VolumeToTrackbar(-12000, tbarVolume.Value);
 
            if (tbarVolume.Value == 0)
            {
                _mediaPlayer.Mute = true;
            }
            else
            {
                _mediaPlayer.Mute = false;
                _mediaPlayer.Volume = iVolumn;
            }
        }
 
 
 
        /// <summary>
        /// mediaPlayer 볼륨을 가져와서 trackbar에 넣어주기 위해 변환 
        /// 1 : 100 = -1200 : 0  => ? : -600 
        /// </summary>
        /// <param name="Min"></param>
        /// <param name="Max"></param>
        /// <param name="Value"></param>
        /// <returns></returns>
        private int TrackbarToVolume(int Min, int Max, int Value)
        {
            double iRange = Max - Min;
            double iTarget = Value - Min;
            return (int)(iTarget / iRange * 100);
        }
 
 
        /// <summary>
        /// tbar의 볼륨을 가져와서 mediaPlayer에 넣어주기 위해 변환
        /// 50 : ?
        /// </summary>
        /// <param name="Min"></param>
        /// <param name="Max"></param>
        /// <param name="Per"></param>
        /// <returns></returns>
        private int VolumeToTrackbar(int Min, int Max, int Per)
        {
            double iRange = Max - Min;
            double iTarget = iRange * Per / 100;
            return (int)(iTarget + Min);
        }
 
 
        #endregion
 
 
 
 
    }
}
 
cs









댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함