죄송합니다 상당히 형편없이 만든 수준낮은 예제입니다. 근거 없는 자신감으로 올려봅니다 -_-;
------------------------- 순 서 -------------------------
1. WAV 파일 재생기 Window Control Library 제작
2. 예제 웹사이트에 Object 태그를 이용한 Dll 파일 Embed
3. CAS(Code Access Security) 보안 설정 프로그램 배포 및 설치
1. Window Control Library 제작
제작목적 - 현재 운영하는 웹사이트에서 서버에서 WAV 파일을 다운로드 하는 ActiveX모듈은 구현이 되어있으나
웹에서 직접 클라이언트로 직접 다운로드한 wav파일을 웹 페이지에서 재생을 해보고자 -_-;;
방법을 찾아보니 c# 에서 쉽게 Wav형식의 파일을 재생할 수 있는 System.Media.SoundPlayer의 클래스의 예제를 보았으나
다른부분은 전혀 문제가 없어보였지만 계획했던 TrackBar를 이용해 시간조정(Duration) 재생이 어렵다고 느껴졌다 .
Duration ( 시간조정 ) 을 자유롭게 조정하며 원하는 부분을 재생하며 재생시간을 표시해주는 방법이 뭐가 있을까 ?
찾다보니 DirectX SDK를 설치하면 .NET 컴포넌트에서 참조 추가를 할수 있는 Microsoft.DirectX.AudioVideoPlayback 의 개체 였다.
프로퍼티를 통해 쉽게 재생시간을 알수 있었으며 시간 조정 재생도 메소드를 제공해 쉽게 구현이 가능해 보였다.
System.Windows.Forms.Timer를 이용한 단일스레드로 구현....
1-(1) 새 프로젝트 - 클래스라이브러리 생성 - 사용자 정의 컨트롤을 추가하였다.
컨트롤의 배치도는 이렇다 ( 너무 허접함 -_-);
1-(2) 소스와 이벤트 -
Lable - lblFileName -> 재생 파일 명 표시
lblAddDurationTime -> 현재 재생시간 표시
lblDurationAllTime -> wav 파일의 총 재생시간표시
TrackBar - trackBarDuartion -> wav 파일의 재생간격 조정
Button -> btnPlay -> wav 재생
btnPause -> wav 재생 일시정지
btnStop -> wav 재생 정지
-------------------------------------------------------------------------------------------------------------------------
using System;-ml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />-ml:namespace prefix = o />-ml:namespace prefix = o />-ml:namespace prefix = o />-ml:namespace prefix = o />-ml:namespace prefix = o />-ml:namespace prefix = o />-ml:namespace prefix = o />-ml:namespace prefix = o />
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
//참조 추가 - .NET -> Microsoft.DirectX.AudioVideoPlayback 추가
using Microsoft.DirectX;
using Microsoft.DirectX.AudioVideoPlayback;
using Timer = System.Windows.Forms.Timer;
using System.IO;
namespace SmartClient_AudioPlayer
{
public partial class SoundPlayer : UserControl
{
//Directx.AudioVideoPlayBack 오디오플레이어 인스턴스
Audio player;
public SoundPlayer()
{
InitializeComponent();
}
/// <summary>
/// Wav 파일의 파일 경로를 받아 재생을 시작한다.
/// </summary>
/// <param name="FilePath"></param>
public void WavPlay(string FilePath)
{
lblAddDurationTime.Text = "";
if (!File.Exists(FilePath))
{
MessageBox.Show("파일이 없습니다"); return;
}
FileInfo fi = new FileInfo(FilePath);
//파일네임을 표시해준다.
lblFileName.Text = fi.Name.ToString();
player = new Audio(FilePath, false);
Double playDuration = player.Duration;
DateTime allDuationTime = new DateTime();
allDuationTime = allDuationTime.AddSeconds(playDuration);
//총 시간을 구해준다.
lblDurationAllTime.Text = allDuationTime.ToString("HH:mm:ss");
trackBarDuration.SetRange(0, int.Parse(Math.Truncate((playDuration + 1)).ToString()));
//0초부터 재생한다.
AudioPlay(0);
}
/// <summary>
/// 재생을 중지하고 모든 사용중인 자원을 Dispose 한다.
/// </summary>
public void WavPlayStop()
{
foreach (Control control in this.Controls)
{
control.Dispose();
}
this.Dispose();
}
/// <summary>
/// 폼이 로드되었을때 이벤트이다.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SoundPlayer_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 재생 하고자 하는 초(Second) 의 값을 받아 해당부분부터 재생하도록 한다.
/// </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.Playing)
{
player.CurrentPosition = Double.Parse(durationStartValue.ToString());
}
else
{
player.CurrentPosition = Double.Parse(durationStartValue.ToString());
player.Play();
}
}
/// <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>
/// Wav 파일의 재생을 시작한다.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPlay_Click(object sender, EventArgs e)
{
player.Play();
timer.Start();
}
/// <summary>
/// Wav파일의 재생을 일시 중지한다.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPause_Click(object sender, EventArgs e)
{
player.Pause();
timer.Stop();
timer.Enabled = false;
}
/// <summary>
/// Wav 파일 재생을 중지 한다.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnStop_Click(object sender, EventArgs e)
{
player.Stop();
timer.Stop();
timer.Enabled = false;
trackBarDuration.Value = trackBarDuration.Minimum;
}
}
}
-------------------------------------------------------------------------------------------------------------------------
* 웹서버에서 해당 메소드에 접근하려면
AssemblyInfo.cs 중 아래 부분을 수정해야한다.
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하십시오.
[assembly: ComVisible(true)]
로 설정해야 웹서버에서 해당 메소드 호출이 가능하다.
'C# > SmartClient' 카테고리의 다른 글
AxWMPLib 를 이용한 간단한 Wav,Mp3 재생기 입니다. (0) | 2014.07.08 |
---|---|
MediaPlayerClass 를 이용한 간단한 미디어 플레이어(wav,mp3 재생) (3) | 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 |