音乐播放器

<Window x:Class="音乐播放器.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:音乐播放器"
        mc:Ignorable="d"
        Title="MainWindow" Height="700" Width="1100" ResizeMode="NoResize" Loaded="Window_Loaded" WindowStartupLocation="CenterScreen">
    <Grid>
        <!--列-->
        <Grid.RowDefinitions>
            <RowDefinition Height="35"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <!--行-->
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="300"></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid x:Name="bg" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" Grid.ColumnSpan="2">
            <Grid.Background>
                <ImageBrush ImageSource="img/1.jpg" Stretch="Fill" Opacity="0.8"></ImageBrush>
            </Grid.Background>
        </Grid>
        <Menu Grid.Row=" 0" Grid.Column="0" Grid.ColumnSpan="2">
            <MenuItem>
                <MenuItem.Icon>
                    <Image Source="img/Query.ico" Margin="4,0,-8,-4"></Image>
                </MenuItem.Icon>
                <MenuItem.Header>
                    <Label>文件</Label>
                </MenuItem.Header>
                <MenuItem Name="DR" Click="DR_Click">
                    <MenuItem.Header>
                        <Label Width="60" Margin="0,0,-40,0">音乐导入</Label>
                    </MenuItem.Header>
                    <MenuItem.Icon>
                        <Image Source="img/open.ico"></Image>
                    </MenuItem.Icon>
                </MenuItem>
                <MenuItem Name="QC" Click="QC_Click">
                    <MenuItem.Header>
                        <Label Margin="0,0,-40,0">清空播放</Label>
                    </MenuItem.Header>
                    <MenuItem.Icon>
                        <Image Source="img/sc.png"></Image>
                    </MenuItem.Icon>
                </MenuItem>
                <MenuItem x:Name="TC" Click="TC_Click">
                    <MenuItem.Header>
                        <Label Margin="0,0,-40,0">退出</Label>
                    </MenuItem.Header>
                    <MenuItem.Icon>
                        <Image Source="img/Close.png"></Image>
                    </MenuItem.Icon>
                </MenuItem>
            </MenuItem>
            <MenuItem>
                <MenuItem.Header>
                    <Label>系统设置</Label>
                </MenuItem.Header>
                <MenuItem.Icon>
                    <Image Source="img/Update.png"></Image>
                </MenuItem.Icon>
                <MenuItem>
                    <MenuItem.Header>
                        <Label Margin="0,0,-40,0">个性化背景</Label>
                    </MenuItem.Header>
                    <MenuItem.Icon>
                        <Image Source="img/v.png"></Image>
                    </MenuItem.Icon>
                    <MenuItem Name="DH" Click="DH_Click">
                        <MenuItem.Header>
                            <Label Margin="0,0,-40,0">大海</Label>
                        </MenuItem.Header>
                    </MenuItem>
                    <MenuItem Name="LJ" Click="LJ_Click">
                        <MenuItem.Header>
                            <Label Margin="0,0,-40,0">林间</Label>
                        </MenuItem.Header>
                    </MenuItem>
                    <MenuItem Name="SJ" Click="SJ_Click">
                        <MenuItem.Header>
                            <Label Margin="0,0,-40,0">山间</Label>
                        </MenuItem.Header>
                    </MenuItem>
                    <Separator></Separator>
                    <MenuItem>
                        <MenuItem.Header>
                            <Label Margin="0,0,-40,0">自定义</Label>
                        </MenuItem.Header>
                        <MenuItem x:Name="TK" Click="TK_Click">
                            <MenuItem.Header>
                                <Label>图库</Label>
                            </MenuItem.Header>
                        </MenuItem>
                    </MenuItem>
                </MenuItem>
                <MenuItem x:Name="Size" Click="Size_Click">
                    <MenuItem.Header>
                        <Label Margin="0,0,-40,0">设置字体</Label>
                    </MenuItem.Header>
                    <MenuItem.Icon>
                        <Image Source="img/bb.png"></Image>
                    </MenuItem.Icon>
                    <MenuItem Name="ST" Click="ST_Click">
                        <MenuItem.Header>
                            <Label>宋体</Label>
                        </MenuItem.Header>
                    </MenuItem>
                    <MenuItem Name="KT" Click="KT_Click">
                        <MenuItem.Header>
                            <Label>楷体</Label>
                        </MenuItem.Header>
                    </MenuItem>
                    <MenuItem Name="WR" Click="WR_Click">
                        <MenuItem.Header>
                            <Label>微软雅黑</Label>
                        </MenuItem.Header>
                    </MenuItem>
                </MenuItem>
            </MenuItem>
        </Menu>
        <TreeView Grid.Row="1" Grid.Column="0" Opacity="0.5" Name="qw">
            <TreeViewItem Name="MusicList"  >
                <TreeViewItem.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="删除" Click="MenuItem_Click">

                        </MenuItem>
                    </ContextMenu>
                </TreeViewItem.ContextMenu>
                <TreeViewItem.Header>
                    <Label>音乐库</Label>
                </TreeViewItem.Header>
            </TreeViewItem>
            <TreeViewItem>
                <TreeViewItem.Header>
                    <Label>我喜欢</Label>
                </TreeViewItem.Header>
            </TreeViewItem>
        </TreeView>
        <Grid Grid.Row="1" Grid.Column="1">
            <Grid.RowDefinitions>
                <RowDefinition Height="40"></RowDefinition>
                <RowDefinition Height="40"></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100"></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition Width="100"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Label Name="MusName" Grid.ColumnSpan="2" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" FontSize="20">未播放歌曲</Label>
            <Label Name="NowTime" Grid.Row="1" Grid.Column="0" HorizontalContentAlignment="Right" FontSize="20" VerticalContentAlignment="Center">00:00</Label>
            <Label Name="EndTime" Grid.Row="1" Grid.Column="2" HorizontalContentAlignment="Left" FontSize="20" VerticalContentAlignment="Center">00:00</Label>
            <Border x:Name="bd" Grid.Column="1" Grid.Row="1" Height="14" Width="680" BorderThickness="1" BorderBrush="Black" Background="Gray" MouseLeftButtonDown="bd_MouseLeftButtonDown">
                <Label Name="valueLb" Background="Green" Width="0" HorizontalAlignment="Left"></Label>
            </Border>
            <Grid Grid.Row="2" Grid.Column="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="37*"/>
                    <RowDefinition Height="520*"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition></ColumnDefinition>
                    <ColumnDefinition Width="80"></ColumnDefinition>
                    <ColumnDefinition></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <Border x:Name="UpBtn" MouseEnter="UpBtn_MouseEnter" MouseLeave="UpBtn_MouseLeave" MouseLeftButtonDown="UpBtn_MouseLeftButtonDown" MouseLeftButtonUp="UpBtn_MouseLeftButtonUp" Width="50" Height="50" HorizontalAlignment="Right" VerticalAlignment="Top" Grid.RowSpan="2" >
                    <Border.Background>
                        <ImageBrush ImageSource="img/92.png"></ImageBrush>
                    </Border.Background>
                </Border>
                <Border x:Name="StartBtn" Tag="true" MouseEnter="UpBtn_MouseEnter" MouseLeave="UpBtn_MouseLeave" MouseLeftButtonDown="UpBtn_MouseLeftButtonDown" MouseLeftButtonUp="UpBtn_MouseLeftButtonUp" Grid.Column="1" Width="50" Height="50" VerticalAlignment="Top" Margin="15,0" Grid.RowSpan="2">
                    <Border.Background>
                        <ImageBrush ImageSource="img/开始.png"></ImageBrush>
                    </Border.Background>
                </Border>
                <Border x:Name="DownBtn" MouseEnter="UpBtn_MouseEnter" MouseLeave="UpBtn_MouseLeave" MouseLeftButtonDown="UpBtn_MouseLeftButtonDown" MouseLeftButtonUp="UpBtn_MouseLeftButtonUp" Grid.Column="2" Width="50" Height="50" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.RowSpan="2" >
                    <Border.Background>
                        <ImageBrush ImageSource="img/94.png"></ImageBrush>
                    </Border.Background>
                </Border>
            </Grid>
        </Grid>
        <Grid Grid.Row="3" Grid.Column="1">
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition Height="50"></RowDefinition>
            </Grid.RowDefinitions>
            <Label Name="lbLrc" Grid.Row="1" HorizontalContentAlignment="Center" FontSize="25" Content="未找到对应歌词"></Label>
        </Grid>
        <MediaElement x:Name="mediaElement" HorizontalAlignment="Left" Height="188" Margin="0,771,0,-215" Grid.Row="1" VerticalAlignment="Top" Width="250"/>
    </Grid>
</Window>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Forms;
using System.IO;
using System.Windows.Threading;
using System.Text.RegularExpressions;


namespace 音乐播放器
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        List<string> lrcList = new List<string>();
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            DirectoryInfo info = new DirectoryInfo(@"../../music");
            if (info.Exists==true)
            {
                info.CreateSubdirectory("music");
            }
            mediaElement.LoadedBehavior = MediaState.Manual;
            mediaElement.MediaOpened += MediaElement_MediaOpened;
            timer.Interval = TimeSpan.FromMilliseconds(10);
            timer.Tick += Timer_Tick;
            DirectoryInfo directory = new DirectoryInfo(path);
            FileInfo[] files = directory.GetFiles();
            List<string> fileNames = new List<string>();
            for (int i = 0; i < files.Length; i++)
            {
                fileNames.Add(files[i].Name);
            }
            DrMusic(fileNames, false);
        }

        private void Timer_Tick(object sender, EventArgs e)
        {
            NowTime.Content = mediaElement.Position.ToString("hh':'mm':'ss");
            double bl = 0;
            if (mediaElement.NaturalDuration.HasTimeSpan)
            {
                bl = mediaElement.Position.TotalSeconds / mediaElement.NaturalDuration.TimeSpan.TotalSeconds;
            }
            if (bl >= 0.9999999)
            {
                timer.Stop();
            }
            valueLb.Width = bd.Width * bl;
            SetChat();
        }

        private void SetChat()
        {
            for (int i = 0; i < lrcList.Count; i++)
            {
                //当前播放时间
                double nowt = mediaElement.Position.TotalMilliseconds;
                string geci = "";
                double current = GetLrcTime(i, out geci);
                if (i< lrcList.Count-1)
                {
                    double next = GetLrcTime(i + 1, out string str);
                    if (current <=nowt&&nowt<next)
                    {
                        lbLrc.Content = geci;
                        return;
                    }
                }
                else
                {
                    lbLrc.Content = geci;
                }
            }
        }
        /// <summary>
        /// 获取当前这句歌词的时间,以毫秒形式运算
        /// </summary>
        /// <param name="index">歌词索引</param>
        private double GetLrcTime(int index, out string chat)
        {
            double time = 0;
            chat = "";
            string []everyChat= lrcList[index].Split(new char[] { '[', ']' });
            string patten = @"^(\d{2}:){1,2}(\d{2}.\d{2})$";
            if (Regex.IsMatch(everyChat[1],patten))
            {
                chat = everyChat[2];
                string t = everyChat[1];
                if (everyChat[1].Length<=8)
                {
                    t = "00:" + everyChat[1];
                }
                TimeSpan ts;
                if (TimeSpan.TryParse(t, out ts)) 
                {
                    //判断的歌词的时间
                    time = ts.TotalMilliseconds;
                }
            }
            return time;
        }
        DispatcherTimer timer = new DispatcherTimer();
        TimeSpan time;
        private void MediaElement_MediaOpened(object sender, RoutedEventArgs e)
        {
            time = mediaElement.NaturalDuration.TimeSpan;
            EndTime.Content = time.ToString("hh':'mm':'ss"); 
            
        }

        //判断如果文件路径不存在则创建
        string path =@"music/";
        string lrcpath = @"lrc/";
        private void DR_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "(*.mp3,*.wav,)|*.mp3;*.wav;";
            dialog.Multiselect = true;
            dialog.InitialDirectory = "C:\\";
            System.Windows.Forms.DialogResult  result = dialog.ShowDialog();
            //文件多选
            //之选音乐格式文件
            if (result == System.Windows.Forms.DialogResult.OK)
            {
                DrMusic(dialog.FileNames.ToList(), true);          
            }
        }
        private void DrMusic(List<string> list, bool isDr)
        {
            foreach (string item in list)
            {
                FileInfo info = new FileInfo(item);
                bool ishave = false;
                foreach (TreeViewItem tree in MusicList.Items)
                {
                    if (tree.Header.ToString() == info.Name)
                    {
                        ishave = true;
                    }
                }
                if (!ishave)
                {
                    TreeViewItem mus = new TreeViewItem();
                    //1.音乐名称不包含扩展名
                    mus.Header = info.Name;
                    MusicList.Items.Add(mus);
                    mus.MouseDoubleClick += Mus_MouseDoubleClick1;
                    if (isDr)
                    {
                        info.CopyTo(path + info.Name, true);
                        string name = item.Substring(0, item.LastIndexOf('.'));
                        FileInfo lrcInfor = new FileInfo(name + ".lrc");
                        if (lrcInfor.Exists)
                        {
                            lrcInfor.CopyTo(lrcpath + lrcInfor.Name);
                        }
                    }
                }
            }
        }

        //MediaPlayer player = new MediaPlayer();
      
        private void Mus_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            TreeViewItem item = sender as TreeViewItem;
            string muPath = path + item.Header+item.Tag;
            PlayMusic(muPath, out lrcList);
        }

        private void TC_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void DH_Click(object sender, RoutedEventArgs e)
        {
            Image image = new Image();
            image.Source = new BitmapImage(new Uri("img/1.jpg",UriKind.Relative));
            image.Stretch = Stretch.Fill;
            bg.Children.Add(image);
        }

        private void LJ_Click(object sender, RoutedEventArgs e)
        {
            Image image = new Image();
            image.Source = new BitmapImage(new Uri("img/2.jpg", UriKind.Relative));
            image.Stretch = Stretch.Fill;
            bg.Children.Add(image);
        }

        private void SJ_Click(object sender, RoutedEventArgs e)
        {
            Image image = new Image();
            image.Source = new BitmapImage(new Uri("img/3.jpg", UriKind.Relative));
            image.Stretch = Stretch.Fill;
            bg.Children.Add(image);
        }
        //清空列表
        private void QC_Click(object sender, RoutedEventArgs e)
        {
            MusicList.Items.Clear();
            mediaElement.Stop();
        }
        //删除
        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            var item = qw.SelectedItem;
            TreeViewItem tree = item as TreeViewItem;
            FileInfo file = new FileInfo(path + tree.Header);
            file.Delete();
            MusicList.Items.Remove(item);
            mediaElement.Stop();
            
        }

        private void Mus_MouseDoubleClick1(object sender, MouseButtonEventArgs e)
        {
            TreeViewItem item = sender as TreeViewItem;
            string muPath = path + item.Header;
            PlayMusic(muPath, out lrcList);
        }
        private void UpBtn_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
        {
            Border img = sender as Border;
            img.Width = img.Height = 52;
            img.BorderThickness = new Thickness(1);
            img.BorderBrush = Brushes.Black;

        }

        private void UpBtn_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
        {
            Border img = sender as Border;
            img.Width = img.Height = 50;
            img.BorderThickness = new Thickness(0);
        }
        ImageBrush brush;
        private void UpBtn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Border img = sender as Border;
            brush = img.Background as ImageBrush;
            if (img.Name == "UpBtn")
            {
                img.Background = new ImageBrush(new BitmapImage(new Uri("../../img/93.png", UriKind.Relative)));
            }
            else if (img.Name == "StartBtn")
            {
                if (img.Tag.ToString() == "true")
                {
                    img.Tag = "false";
                    mediaElement.Pause();
                    img.Background = new ImageBrush(new BitmapImage(new Uri("../../img/暂停.png", UriKind.Relative)));
                }
                else if (img.Tag.ToString() == "false")
                {
                    mediaElement.Play();
                    img.Tag = "true";
                    img.Background = new ImageBrush(new BitmapImage(new Uri("../../img/开始.png", UriKind.Relative)));
                }
            }
            else if (img.Name == "DownBtn")
            {
                img.Background = new ImageBrush(new BitmapImage(new Uri("../../img/95.png", UriKind.Relative)));
            }
        }

        private void UpBtn_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            Border img = sender as Border;
            if (img.Name == "StartBtn")
            {
                return;
            }
            img.Background = brush;
        }

        void PlayMusic(string path, out List<string> mlrc)
        {
            string musicChat = "";
            FileInfo file = new FileInfo(path);
            string musicName = file.Name.Substring(0, file.Name.LastIndexOf('.'));
            MusName.Content = musicName;
            FileInfo info = new FileInfo(lrcpath+musicName+".lrc");
            if (info.Exists)
            {
                StreamReader reader = new StreamReader(lrcpath + musicName + ".lrc",Encoding.Default);
                musicChat = reader.ReadToEnd();
            }
            mlrc = musicChat.Split( new char[] { '\r', '\n' }).ToList();
            timer.Start();
            mediaElement.Source = new Uri(path, UriKind.Relative);
            mediaElement.Play();
        }
        //自定义背景
        private void TK_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "(*.jpg,*.png,)|*.jpg;*.png;";
            System.Windows.Forms.DialogResult result = open.ShowDialog();
            if (result==System.Windows.Forms.DialogResult.OK)
            {
                string back = open.FileName;
                zdybj(back);
            }         
        }
        //自定义背景的方法
        private void zdybj(string back)
        {
            Image img = new Image();
            img.Source = new BitmapImage(new Uri(back, UriKind.RelativeOrAbsolute));
            img.Stretch = Stretch.Fill;
            bg.Children.Add(img);
        }
       
        //进度条快进/快退
        private void bd_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Point point = e.GetPosition(bd);
            mediaElement.Clock = null;
            string[] points = point.ToString().Split(',');
            double jindu = double.Parse((Convert.ToDouble(points[0]) / bd.Width).ToString("0.00"));
            mediaElement.Position = new TimeSpan(0, 0, 0, 0, (int)(jindu * time.TotalMilliseconds));
        }
        private void Size_Click(object sender, RoutedEventArgs e)
        {
            FontSize size = new FontSize();

        }

        private void ST_Click(object sender, RoutedEventArgs e)
        {

        }

        private void KT_Click(object sender, RoutedEventArgs e)
        {

        }

        private void WR_Click(object sender, RoutedEventArgs e)
        {

        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值