실력자 분들에게는 형편 없는 게시글 죄송합니다 ...그래도 올려봅니다 ;;
컨트롤의 배치는 UI도 간단하며
참조는
Microsoft.DirectX.AudioVideoPlayback ( 전체 재생시간만 구하는 역할)COM Windows Media Player - msdxm.tlb 를 참조하였습니다.
TrackBar의 움직임이 Timer를 이용하여 1초마다 Tick을 발생시켜 움직임이 부자연스럽습니다 -_-;;
파일의 총 재생시간은 Microsoft.DirectX.AudioVideoPlayback 의 클래스를 이용하여 구하였습니다.
(미디어 플레이어 클래스에서는 총 재생시간을 못찾겠습니다 크흑 )
MediaPlayer 클래스의 메모리 해제 방법을 못찾겠습니다.
창을 죽여도 음원은 계속 재생이 되서 예외가 발생하는 오픈 Path를 설정하엿습니다 ㅠㅠ
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Windows;
using System.IO;
//using Microsoft.DirectX.AudioVideoPlayback;
//using MediaPlayer;
namespace SmartClient_AudioPlayer
{
public partial class MediaSoundPlayer : UserControl
{
MediaPlayer.MediaPlayerClass player;
public MediaSoundPlayer()
{
InitializeComponent();
player = new MediaPlayer.MediaPlayerClass();
}
~MediaSoundPlayer()
{
}
private void MediaSoundPlayer_Load(object sender, EventArgs e)
{
lblRateSpeed.Text = "";
}
private string __filePath = string.Empty;
public void StartAudioPlay(string _filePath) {
lblAddDurationTime.Text = "";
string filePath = _filePath;
if (!File.Exists(filePath))
{
return;
}
this.__filePath = filePath;
using (Audio fileDuration = new Audio(filePath)) {
double playDuration = 0;
playDuration = fileDuration.Duration;
DateTime allDuationTime = new DateTime();
allDuationTime = allDuationTime.AddSeconds(playDuration);//총 시간을 구해준다.
lblDurationAllTime.Text = allDuationTime.ToString("HH:mm:ss");//파일네임을 표시해준다.
lblFileName.Text = filePath;
trackBarVolumn.SetRange(player.Volume, 0);
trackBarVolumn.Value = player.Volume;
trackBarDuration.SetRange(0, int.Parse(Math.Truncate((playDuration + 1)).ToString()));
};
player.Open(_filePath);
player.Stop();
AudioPlay(0);
}
/// <summary>
///
/// </summary>
/// <param name="durationStartValue"></param>
private void AudioPlay(int durationStartValue)
{
//스크롤이 움직인곳에서 다시 포인트를 움직이기 시작한다.
trackBarDuration.Value = durationStartValue;
timer.Enabled = true;
timer.Interval = 1000;
//TrackBar를 움직이기 시작한다.
timer.Start();
//Wave 파일 재생을 시작한다.
if (player.PlayState == MediaPlayer.MPPlayStateConstants.mpPlaying || player.PlayState == MediaPlayer.MPPlayStateConstants.mpScanForward || player.PlayState == MediaPlayer.MPPlayStateConstants.mpScanReverse)
{
player.CurrentPosition = Double.Parse(durationStartValue.ToString());
player.Play();
} else {
//player.CurrentPosition = Double.Parse(durationStartValue.ToString());
player.Play();
}
SetRateValue();
}
private void btnPlay_Click(object sender, EventArgs e)
{
if (trackBarDuration.Value >= trackBarDuration.Maximum)
{
trackBarDuration.Value = 0;
player.CurrentPosition = 0;
player.Play();
timer.Start();
} else {
player.Play();
timer.Start();
}
}
/// <summary>
/// 타이머의 Tick 이벤트가 1초씩 발생할때마다 Label의 시간증가와 트랙바의 Value를 증가시켜준다.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void timer_Tick(object sender, EventArgs e)
{
DateTime DurationTime = new DateTime();
DurationTime = DurationTime.AddSeconds(Double.Parse(trackBarDuration.Value.ToString()));
lblAddDurationTime.Text = DurationTime.ToString("HH:mm:ss");
trackBarDuration.Value = trackBarDuration.Value + 1;
}
/// <summary>
/// Duration TrackBar의 값이 변경될때마다 이벤트가 발생한다.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void trackBarDuration_ValueChanged(object sender, EventArgs e)
{
if (trackBarDuration.Maximum <= trackBarDuration.Value)
{
timer.Stop();
}
}
/// <summary>
/// Duration TrackBar의 스크롤을 제어할때마다 이벤트가 발생한다.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void trackBarDuration_Scroll(object sender, EventArgs e)
{
AudioPlay(trackBarDuration.Value);
}
/// <summary>
/// 볼륨을 조정할 때 이벤트가 발생합니다.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void trackBarVolumn_Scroll(object sender, EventArgs e)
{
player.Volume = trackBarVolumn.Value;
}
/// <summary>
/// 재생간격을 조정할때 발생합니다.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void trackBarRateSpeed_Scroll(object sender, EventArgs e)
{
}
private void btnPause_Click(object sender, EventArgs e)
{
player.Pause();
timer.Stop();
timer.Enabled = false;
}
private void btnStop_Click(object sender, EventArgs e)
{
player.Stop();
timer.Stop();
timer.Enabled = false;
trackBarDuration.Value = trackBarDuration.Minimum;
}
public void StopAudioPlay()
{
player.Open("");
player.FileName = "";
player = null;
if (File.Exists(__filePath))
{
FileInfo fi = new FileInfo(__filePath);
fi.Delete();
}
this.Dispose(true);
Application.Exit();
}
private void trackBarRateSpeed_ValueChanged(object sender, EventArgs e)
{
SetRateValue();
}
public void SetRateValue(){
switch (trackBarRateSpeed.Value)
{
case 1: lblRateSpeed.Text = "1 배속";
player.Rate = 1;
timer.Interval = 1000;
break;
case 2: lblRateSpeed.Text = "1.1 배속";
player.Rate = 1.1;
timer.Interval = 900;
break;
case 3: lblRateSpeed.Text = "1.2 배속";
player.Rate = 1.2;
timer.Interval = 800;
break;
case 4: lblRateSpeed.Text = "1.3 배속";
player.Rate = 1.3;
timer.Interval = 700;
break;
case 5: lblRateSpeed.Text = "1.4 배속";
player.Rate = 1.4;
timer.Interval = 600;
break;
case 6: lblRateSpeed.Text = "1.5 배속";
player.Rate = 1.5;
timer.Interval = 500;
break;
case 7: lblRateSpeed.Text = "1.6 배속";
player.Rate = 1.6;
timer.Interval = 400;
break;
case 8: lblRateSpeed.Text = "1.7 배속";
player.Rate = 1.7;
timer.Interval = 300;break;
}
}
private void MediaSoundPlayer_Leave(object sender, EventArgs e){
}
}
}
'C# > SmartClient' 카테고리의 다른 글
AxWMPLib 를 이용해 미디어플레이어의 빨리감기 버튼 비활성화 예제 (0) | 2014.11.05 |
---|---|
AxWMPLib 를 이용한 간단한 Wav,Mp3 재생기 입니다. (0) | 2014.07.08 |
클라이언트 .Net Framework 4이상 업데이트시 기존 SmartClient 운영방안 (0) | 2014.07.04 |
SmartClient를 이용한 간단한 Wav 파일 재생기 제작 - 3.CAS(Code Access Security)보안설정프로그램설치 (0) | 2013.02.01 |
SmartClient를 이용한 간단한 Wav 파일 재생기 제작 - 2. 예제웹사이트에Object 태그를이용한 Dll파일참조 (0) | 2013.02.01 |