caudio/Examples/CSharpExamples/cAudioPlayer/MainWnd.cs

122 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using cAudio;
namespace cAudioPlayer
{
public partial class MainWnd : Form
{
private IAudioManager mAudioMgr;
private IAudioSource mCurrentSource;
private readonly AudioSourceListener mAudioListener;
private readonly Timer mUpdateTimer = new Timer();
public MainWnd()
{
InitializeComponent();
mAudioMgr = cAudioCSharpWrapper.createAudioManager(true);
mAudioListener = new AudioSourceListener(this);
mUpdateTimer.Tick += UpdateTimerTick;
Closing += MainWnd_Closing;
}
void MainWnd_Closing(object sender, CancelEventArgs e)
{
if (mCurrentSource != null)
{
mCurrentSource.unRegisterEventHandler(mAudioListener);
mCurrentSource = null;
}
mAudioMgr.Dispose();
mAudioMgr = null;
}
void UpdateTimerTick(object sender, EventArgs e)
{
UpdateSlider();
}
private void BtnOpenClick(object sender, EventArgs e)
{
btnPlay.Text = "Play";
btnPlay.Enabled = false;
btnStop.Enabled = false;
currentPostion.Value = 0;
mUpdateTimer.Stop();
if (mCurrentSource != null)
{
mCurrentSource.unRegisterEventHandler(mAudioListener);
mAudioMgr.release(mCurrentSource);
mCurrentSource = null;
}
var openFileDlg = new OpenFileDialog();
if (openFileDlg.ShowDialog() == DialogResult.OK)
{
var file = openFileDlg.FileName;
mCurrentSource = mAudioMgr.create("musicFile", file);
mCurrentSource.registerEventHandler(mAudioListener);
fileNFO.Text = "File:" + file.Substring(file.LastIndexOf("\\") + 1) + " | Length: " + (mCurrentSource.getTotalAudioTime() / 60).ToString("#.00") + " min";
btnPlay.Enabled = true;
}
}
private void BtnPlayClick(object sender, EventArgs e)
{
btnStop.Enabled = true;
if(btnPlay.Text == "Play")
{
btnPlay.Text = "Pause";
mCurrentSource.play2d(false);
mUpdateTimer.Interval = 50;
mUpdateTimer.Start();
}
else
{
btnPlay.Text = "Play";
mCurrentSource.pause();
mUpdateTimer.Stop();
}
}
private void BtnStopClick(object sender, EventArgs e)
{
OnStop();
}
public void OnStop()
{
btnPlay.Invoke((MethodInvoker)delegate { btnPlay.Text = "Play"; });
btnStop.Invoke((MethodInvoker)delegate { btnStop.Enabled = false; });
if(mCurrentSource.isPlaying())
mCurrentSource.stop();
mUpdateTimer.Stop();
currentPostion.Invoke((MethodInvoker)delegate { currentPostion.Value = 0; });
}
public void UpdateSlider()
{
var percent = (int)((mCurrentSource.getCurrentAudioTime() / mCurrentSource.getTotalAudioTime()) * 1000);
if (currentPostion.InvokeRequired)
{
currentPostion.Invoke((MethodInvoker)delegate { currentPostion.Value = percent; });
}
else
{
currentPostion.Value = percent;
}
}
}
}