141 lines
4.3 KiB
C#
141 lines
4.3 KiB
C#
using KaraokePlayer;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.IO;
|
|
using System.Windows.Forms;
|
|
using Herse.Models;
|
|
using System.IO.Compression;
|
|
|
|
namespace KaraokePlayer
|
|
{
|
|
public class PlayerWrapper
|
|
{
|
|
private KaraokeVideoPlayer currentPlayer = null;
|
|
private KaraokeVideoPlayer mp4Player;
|
|
private KaraokeVideoPlayer cdgPlayer;
|
|
public Song Song { get; set; }
|
|
|
|
public delegate void SongEndedEventHandler();
|
|
public SongEndedEventHandler OnSongEnded { get; set; }
|
|
|
|
public PlayerWrapper(KaraokeVideoPlayer cdgPlayer, KaraokeVideoPlayer mp4Player)
|
|
{
|
|
cdgPlayer.setup(true, true);
|
|
mp4Player.setup(false, true);
|
|
cdgPlayer.songEndedHandler += new KaraokePlayer.KaraokeVideoPlayer.SongEndedEventHandler(this.karaokePlayerSongEnded);
|
|
mp4Player.songEndedHandler += new KaraokePlayer.KaraokeVideoPlayer.SongEndedEventHandler(this.karaokePlayerSongEnded);
|
|
cdgPlayer.Dock = DockStyle.Fill;
|
|
mp4Player.Dock = DockStyle.Fill;
|
|
this.mp4Player = mp4Player;
|
|
this.cdgPlayer = cdgPlayer;
|
|
}
|
|
|
|
private void karaokePlayerSongEnded(object sender, EventArgs e)
|
|
{
|
|
if (OnSongEnded != null) OnSongEnded();
|
|
}
|
|
|
|
public void stop()
|
|
{
|
|
if (currentPlayer == null) return;
|
|
currentPlayer.Stop();
|
|
}
|
|
|
|
public void pause()
|
|
{
|
|
if (currentPlayer == null) return;
|
|
currentPlayer.Pause();
|
|
}
|
|
|
|
public void play()
|
|
{
|
|
if (Song == null) return;
|
|
if (currentPlayer != null && currentPlayer.isPaused)
|
|
{
|
|
currentPlayer.Resume();
|
|
return;
|
|
}
|
|
switch (Song.FileType)
|
|
{
|
|
case FileType.CDG:
|
|
PlayCdg();
|
|
break;
|
|
case FileType.ZIP:
|
|
PlayZip();
|
|
break;
|
|
case FileType.MP4:
|
|
PlayM4p();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void PlayM4p()
|
|
{
|
|
currentPlayer = mp4Player;
|
|
mp4Player.Play(new Uri(Song.Path));
|
|
mp4Player.Visible = true;
|
|
cdgPlayer.Visible = false;
|
|
cdgPlayer.Stop();
|
|
}
|
|
|
|
private void PlayZip()
|
|
{
|
|
string playPath = null;
|
|
string extractPath = Path.Combine(Directory.GetCurrentDirectory(), "temp");
|
|
DeleteDirectory(extractPath);
|
|
Directory.CreateDirectory(extractPath);
|
|
using (ZipArchive archive = ZipFile.OpenRead(Song.Path))
|
|
{
|
|
foreach (ZipArchiveEntry entry in archive.Entries)
|
|
{
|
|
if (entry.FullName.EndsWith(".mp3", StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
playPath = Path.Combine(extractPath, entry.FullName);
|
|
}
|
|
entry.ExtractToFile(Path.Combine(extractPath, entry.FullName));
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(playPath))
|
|
{
|
|
currentPlayer = cdgPlayer;
|
|
cdgPlayer.Play(new Uri(playPath));
|
|
cdgPlayer.Visible = true;
|
|
mp4Player.Visible = false;
|
|
mp4Player.Stop();
|
|
}
|
|
}
|
|
|
|
private void PlayCdg()
|
|
{
|
|
currentPlayer = cdgPlayer;
|
|
cdgPlayer.Play(new Uri(Path.ChangeExtension(Song.Path, ".mp3")));
|
|
cdgPlayer.Visible = true;
|
|
mp4Player.Visible = false;
|
|
mp4Player.Stop();
|
|
}
|
|
|
|
private void DeleteDirectory(string target_dir)
|
|
{
|
|
if (!Directory.Exists(target_dir)) { return; }
|
|
string[] files = Directory.GetFiles(target_dir);
|
|
string[] dirs = Directory.GetDirectories(target_dir);
|
|
|
|
foreach (string file in files)
|
|
{
|
|
File.SetAttributes(file, FileAttributes.Normal);
|
|
File.Delete(file);
|
|
}
|
|
|
|
foreach (string dir in dirs)
|
|
{
|
|
DeleteDirectory(dir);
|
|
}
|
|
|
|
Directory.Delete(target_dir, false);
|
|
}
|
|
}
|
|
}
|