티스토리 뷰
======================================================
안녕하세요 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(-1200, 0, _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(-1200, 0, 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 |
'C# > C# 강좌 Winform' 카테고리의 다른 글
Doridori C# 강의 2) 49.크롤링 (crawling) (6) | 2020.09.13 |
---|---|
Doridori C# 강의 2) 48.비동기 제어 (async, await) (32) | 2020.08.02 |
Doridori C# 강의 2) 46. Excel 다루기 (Excel Export) (15) | 2020.06.07 |
Doridori C# 강의 2) 45. DB 사용하기 (WordSearch) (6) | 2020.05.10 |
Doridori C# 강의 2) 44. TreeView (File Copy) (4) | 2020.04.18 |
- Total
- Today
- Yesterday
- 술
- 칵테일
- 가볼만한곳
- 가볼만한 곳
- C# 강좌
- 주말
- 게임
- 모바일
- 광저우
- Visual Studio
- 도리도리 C#
- 서울
- 위스키
- 하이볼
- 막걸리
- 소주
- 와인
- C# 기초 강의
- 나들이
- WinForm
- 도리도리
- 프로그램 강의
- 맥주
- 아이랑
- 보드카
- C#
- 맛집
- 전통주
- C# 강의
- 증류주
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |