122 lines
3.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|