380 lines
9.6 KiB
C#
380 lines
9.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Media;
|
|
|
|
namespace RadioBroadcaster.Server
|
|
{
|
|
class MediaEngine
|
|
{
|
|
MediaPlayer PlayerOne = new MediaPlayer();
|
|
MediaPlayer PlayerTwo = new MediaPlayer();
|
|
Uri PlayerOneUri;
|
|
Uri PlayerTwoUri;
|
|
private double DefaultVolume = 0.5;
|
|
/// <summary>
|
|
/// Handlers for if the media either ends or completely stops playing.
|
|
/// Default interval is 5s between attempts to restart.
|
|
/// </summary>
|
|
public void AddHandlers()
|
|
{
|
|
PlayerOne.MediaEnded += PlayerOne_MediaEnded;
|
|
PlayerOne.MediaFailed += PlayerOne_MediaFailed;
|
|
|
|
PlayerTwo.MediaEnded += PlayerTwo_MediaEnded;
|
|
PlayerTwo.MediaFailed += PlayerTwo_MediaFailed;
|
|
}
|
|
|
|
private void PlayerTwo_MediaFailed(object sender, ExceptionEventArgs e)
|
|
{
|
|
LogManager.Write("Media stream 2 failed at time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString());
|
|
PlayerTwo.Close();
|
|
Thread.Sleep(5000);
|
|
PlayerTwo.Open(PlayerTwoUri);
|
|
PlayerTwo.Play();
|
|
}
|
|
|
|
private void PlayerTwo_MediaEnded(object sender, EventArgs e)
|
|
{
|
|
LogManager.Write("Media stream 2 ended at time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString());
|
|
PlayerTwo.Close();
|
|
Thread.Sleep(5000);
|
|
PlayerTwo.Open(PlayerTwoUri);
|
|
PlayerTwo.Play();
|
|
}
|
|
|
|
private void PlayerOne_MediaFailed(object sender, ExceptionEventArgs e)
|
|
{
|
|
LogManager.Write("Media stream 1 failed at time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString());
|
|
PlayerOne.Close();
|
|
Thread.Sleep(5000);
|
|
PlayerOne.Open(PlayerOneUri);
|
|
PlayerOne.Play();
|
|
}
|
|
|
|
private void PlayerOne_MediaEnded(object sender, EventArgs e)
|
|
{
|
|
LogManager.Write("Media stream 1 ended at time: " + DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString());
|
|
PlayerOne.Close();
|
|
Thread.Sleep(5000);
|
|
PlayerOne.Open(PlayerOneUri);
|
|
PlayerOne.Play();
|
|
}
|
|
#region States
|
|
private bool One_Playing = false;
|
|
private bool One_Loaded = false;
|
|
|
|
private bool Two_Playing = false;
|
|
private bool Two_Loaded = false;
|
|
|
|
private int CurrentPrimary = 1;
|
|
#endregion
|
|
public Uri SetPrimaryLocation
|
|
{
|
|
get
|
|
{
|
|
if (CurrentPrimary == 1)
|
|
{
|
|
return PlayerOne.Source;
|
|
}
|
|
else
|
|
{
|
|
return PlayerTwo.Source;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
if(CurrentPrimary == 1)
|
|
{
|
|
PlayerOneUri = value;
|
|
PlayerOne.Open(value);
|
|
}
|
|
else
|
|
{
|
|
PlayerTwoUri = value;
|
|
PlayerTwo.Open(value);
|
|
}
|
|
}
|
|
}
|
|
public Uri SetSecondaryLocation
|
|
{
|
|
get
|
|
{
|
|
if (CurrentPrimary == 1)
|
|
{
|
|
return PlayerTwo.Source;
|
|
}
|
|
else
|
|
{
|
|
return PlayerOne.Source;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
if (CurrentPrimary == 1)
|
|
{
|
|
PlayerTwoUri = value;
|
|
PlayerTwo.Open(value);
|
|
}
|
|
else
|
|
{
|
|
PlayerOneUri = value;
|
|
PlayerOne.Open(value);
|
|
}
|
|
}
|
|
}
|
|
public void PlayPrimary()
|
|
{
|
|
if(CurrentPrimary == 1)
|
|
{
|
|
PlayerOne.Play();
|
|
One_Playing = true;
|
|
}
|
|
else
|
|
{
|
|
PlayerTwo.Play();
|
|
Two_Playing = true;
|
|
}
|
|
}
|
|
public void PlaySecondary()
|
|
{
|
|
if (CurrentPrimary == 1)
|
|
{
|
|
//PlayerTwo.IsMuted = true;
|
|
PlayerTwo.Play();
|
|
Two_Playing = true;
|
|
}
|
|
else
|
|
{
|
|
//PlayerOne.IsMuted = true;
|
|
PlayerOne.Play();
|
|
One_Playing = true;
|
|
}
|
|
}
|
|
public string SetPlayer1
|
|
{
|
|
get
|
|
{
|
|
return PlayerOneUri.AbsoluteUri;
|
|
}
|
|
set
|
|
{
|
|
PlayerOneUri = new Uri(value);
|
|
if (One_Playing)
|
|
{
|
|
PlayerOne.Open(PlayerOneUri);
|
|
}
|
|
}
|
|
}
|
|
public string SetPlayer2
|
|
{
|
|
get
|
|
{
|
|
return PlayerTwoUri.AbsoluteUri;
|
|
}
|
|
set
|
|
{
|
|
PlayerTwoUri = new Uri(value);
|
|
if (Two_Playing)
|
|
{
|
|
PlayerTwo.Open(PlayerTwoUri);
|
|
}
|
|
}
|
|
}
|
|
public bool IsPlayingAudio
|
|
{
|
|
get
|
|
{
|
|
if(One_Playing == false && Two_Playing == false)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
public bool IsOnePlayingAudio
|
|
{
|
|
get
|
|
{
|
|
return One_Playing;
|
|
}
|
|
}
|
|
public bool IsTwoPlayingAudio
|
|
{
|
|
get
|
|
{
|
|
return Two_Playing;
|
|
}
|
|
}
|
|
public bool IsPrimaryLoaded
|
|
{
|
|
get
|
|
{
|
|
if(CurrentPrimary == 1)
|
|
{
|
|
return One_Loaded;
|
|
}
|
|
else
|
|
{
|
|
return Two_Loaded;
|
|
}
|
|
}
|
|
}
|
|
public bool IsSecondaryLoaded
|
|
{
|
|
get
|
|
{
|
|
if (CurrentPrimary == 1)
|
|
{
|
|
return Two_Loaded;
|
|
}
|
|
else
|
|
{
|
|
return One_Loaded;
|
|
}
|
|
}
|
|
}
|
|
public int CurrentPrimaryPlayer
|
|
{
|
|
get{ return CurrentPrimary; }
|
|
}
|
|
public double PrimaryVolume
|
|
{
|
|
get
|
|
{
|
|
if(CurrentPrimary == 1)
|
|
{
|
|
return PlayerOne.Volume;
|
|
}
|
|
else
|
|
{
|
|
return PlayerTwo.Volume;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
if(CurrentPrimary == 1)
|
|
{
|
|
PlayerOne.Volume = value;
|
|
}
|
|
else
|
|
{
|
|
PlayerTwo.Volume = value;
|
|
}
|
|
}
|
|
}
|
|
public double SecondaryVolume
|
|
{
|
|
get
|
|
{
|
|
if (CurrentPrimary == 1)
|
|
{
|
|
return PlayerTwo.Volume;
|
|
}
|
|
else
|
|
{
|
|
return PlayerOne.Volume;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
if (CurrentPrimary == 1)
|
|
{
|
|
PlayerTwo.Volume = value;
|
|
}
|
|
else
|
|
{
|
|
PlayerOne.Volume = value;
|
|
}
|
|
}
|
|
}
|
|
public double SetDefaultVolume
|
|
{
|
|
set
|
|
{
|
|
DefaultVolume = value;
|
|
PrimaryVolume = value;
|
|
SecondaryVolume = value;
|
|
}
|
|
}
|
|
public bool SecondaryMuted
|
|
{
|
|
get
|
|
{
|
|
if (CurrentPrimary == 1)
|
|
{
|
|
return PlayerTwo.IsMuted;
|
|
}
|
|
else
|
|
{
|
|
return PlayerOne.IsMuted;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
if(CurrentPrimary == 1)
|
|
{
|
|
PlayerTwo.IsMuted = value;
|
|
}
|
|
else
|
|
{
|
|
PlayerOne.IsMuted = value;
|
|
}
|
|
}
|
|
}
|
|
public bool PrimaryMuted
|
|
{
|
|
get
|
|
{
|
|
if (CurrentPrimary == 1)
|
|
{
|
|
return PlayerOne.IsMuted;
|
|
}
|
|
else
|
|
{
|
|
return PlayerTwo.IsMuted;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
if (CurrentPrimary == 1)
|
|
{
|
|
PlayerOne.IsMuted = value;
|
|
}
|
|
else
|
|
{
|
|
PlayerTwo.IsMuted = value;
|
|
}
|
|
}
|
|
}
|
|
public void SwapPrimary()
|
|
{
|
|
if(CurrentPrimary == 1)
|
|
{
|
|
CurrentPrimary = 2;
|
|
}
|
|
else
|
|
{
|
|
CurrentPrimary = 1;
|
|
}
|
|
}
|
|
public void StopPrimary()
|
|
{
|
|
if(CurrentPrimary == 1)
|
|
{
|
|
PlayerOne.Close();
|
|
}
|
|
else
|
|
{
|
|
PlayerTwo.Close();
|
|
}
|
|
}
|
|
}
|
|
}
|