• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[WPF] Mp3Player - Trình Nghe Nhạc Đơn Giản.

Mã nguồn các chương trình tiện ích

Điều hành viên: tungcan5diop, QUANITGROBEST

VnHarry
Bài viết: 1
Ngày tham gia: T.Năm 19/08/2010 10:53 pm

[WPF] Mp3Player - Trình Nghe Nhạc Đơn Giản.

Gửi bàigửi bởi VnHarry » T.Năm 19/08/2010 11:17 pm

Tên chương trình: WPFMP3Player
Ngôn ngữ lập trình: C#
Tác giả: Phạm Thành Tú
Chức năng: Nghe được gần như hầu hết định dạng. Sử dụng thư viện Bass.net.

Thư viện trong file đính kèm phần Debug.
Code do mình viết cái bạn có thấy gà chỗ nào thì góp ý tại đây .
Lần đầu post bài có gì thiếu sót xin mọi người chỉ bảo thêm.

Main.xaml

Mã: Chọn hết

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:WpfAudioPlayer.Views;assembly=WpfAudioPlayer" xmlns:Options="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="WpfMp3Player.Main"
    Title="Main" Height="150" Width="640" mc:Ignorable="d" Loaded="Window_Loaded">
   <Window.Resources>
   
      <!-- Brush: normal background color -->
      <LinearGradientBrush x:Key="Brush.Button.Background.Normal" StartPoint="0,0" EndPoint="0,1" Options:Freeze="True">
         <LinearGradientBrush.GradientStops>
            <GradientStopCollection>
               <GradientStop Color="#FFFFFF" Offset="0"/>
               <GradientStop Color="#EDEDED" Offset="0.5"/>
               <GradientStop Color="#E8E8E8" Offset="0.5"/>
               <GradientStop Color="#DBDBDB" Offset="1"/>
            </GradientStopCollection>
         </LinearGradientBrush.GradientStops>
      </LinearGradientBrush>

      <!-- Brush: Color Border -->
      <LinearGradientBrush x:Key="Brush.Button.Border" StartPoint="0,0" EndPoint="0,1" Options:Freeze="True">
         <LinearGradientBrush.GradientStops>
            <GradientStopCollection>
               <GradientStop Color="#707070" Offset="0.0"/>
               <GradientStop Color="#444444" Offset="1.0"/>
            </GradientStopCollection>
         </LinearGradientBrush.GradientStops>
      </LinearGradientBrush>

      <!-- Consolidated toggle button: round-->
      <Style x:Key="Style.ToggleButton.Ellipse" TargetType="{x:Type ToggleButton}">
         <Setter Property="Template">
            <Setter.Value>
               <ControlTemplate TargetType="{x:Type ToggleButton}">
                  <Grid>
                     <Ellipse x:Name="BackgroundBorder" Fill="{StaticResource Brush.Button.Background.Normal}" Stroke="{StaticResource Brush.Button.Border}" StrokeThickness="1" />
                     <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                  </Grid>
               </ControlTemplate>
            </Setter.Value>
         </Setter>
      </Style>
   
      <!-- onsolidated buttons: Left-->
      <Style x:Key="Style.Button.Left" TargetType="{x:Type Button}">
         <Setter Property="Template">
            <Setter.Value>
               <ControlTemplate TargetType="{x:Type Button}">
                  <Border x:Name="BackgroundBorder" BorderBrush="{StaticResource Brush.Button.Border}" BorderThickness="1" Background="{StaticResource Brush.Button.Background.Normal}" CornerRadius="4,0,0,4">
                     <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                  </Border>
               </ControlTemplate>
            </Setter.Value>
         </Setter>
      </Style>
   
      <!-- Consolidated button: Right -->
      <Style x:Key="Style.Button.Right" TargetType="{x:Type Button}">
         <Setter Property="Template">
            <Setter.Value>
               <ControlTemplate TargetType="{x:Type Button}">
                  <Border x:Name="BackgroundBorder" BorderBrush="{StaticResource Brush.Button.Border}" BorderThickness="1" Background="{StaticResource Brush.Button.Background.Normal}" CornerRadius="0,4,4,0">
                     <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                  </Border>
               </ControlTemplate>
            </Setter.Value>
         </Setter>
      </Style>

      <!-- Background color information portion -->
      <LinearGradientBrush x:Key="Brush.InformationArea.Background" StartPoint="0,0" EndPoint="0,1" Options:Freeze="True">
         <LinearGradientBrush.GradientStops>
            <GradientStopCollection>
               <GradientStop Color="#888" Offset="0.0"/>
               <GradientStop Color="#666" Offset="0.5"/>
               <GradientStop Color="#666" Offset="0.5"/>
               <GradientStop Color="#444" Offset="1.0"/>
            </GradientStopCollection>
         </LinearGradientBrush.GradientStops>
      </LinearGradientBrush>

      <SolidColorBrush x:Key="Brush.InformationArea.Border" Color="#CCC" Options:Freeze="True" />

      <!--Foreground information portion -->
      <SolidColorBrush x:Key="Brush.InformationArea.Foreground" Color="#EEE" Options:Freeze="True" />

   </Window.Resources>
   <Grid Margin="0" Height="100">
      <Grid.ColumnDefinitions>
         <ColumnDefinition Width="0.039*"/>
         <ColumnDefinition Width="0.961*"/>
      </Grid.ColumnDefinitions>
      <Grid.RowDefinitions>
         <RowDefinition Height="Auto" MinHeight="64" />
         <RowDefinition />
         <RowDefinition Height="Auto" />
      </Grid.RowDefinitions>
      <DockPanel Margin="0,0,12,0" Grid.ColumnSpan="3">      
         <ToggleButton x:Name="btnPlay" Width="54" Height="54" Margin="4,0,0,0" Click="btnPlay_Click" >
               
            <ToggleButton.Resources>
               <!-- Play Button -->
               <Path x:Key="Icon.Play" Width="18" Height="20" Margin="4,0,0,0" Stretch="Fill" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ToggleButton}}}" Data="F1 M 416,223.603L 384,205.128L 384,242.079L 416,223.603 Z "/>

               <!-- Pause Button -->
               <StackPanel x:Key="Icon.Pause" Orientation="Horizontal">
                  <Rectangle Width="6" Height="16" Margin="0,0,2,0" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ToggleButton}}}" />
                  <Rectangle Width="6" Height="16" Margin="2,0,0,0" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ToggleButton}}}" />
               </StackPanel>
            
               <Style BasedOn="{StaticResource Style.ToggleButton.Ellipse}" TargetType="{x:Type ToggleButton}">
                  <Style.Triggers>
                     <Trigger Property="IsChecked" Value="False">
                        <Setter Property="Content" Value="{DynamicResource Icon.Play}" />
                     </Trigger>
                     <Trigger Property="IsChecked" Value="True">
                        <Setter Property="Content" Value="{DynamicResource Icon.Pause}" />
                     </Trigger>
                  </Style.Triggers>
               </Style>
            </ToggleButton.Resources>
         </ToggleButton>
         <Grid DockPanel.Dock="Left">
            <Grid.RowDefinitions>
               <RowDefinition />
               <RowDefinition />
            </Grid.RowDefinitions>

            <!-- Volume slider -->
            <Slider x:Name="trackBarVolume" Grid.Row="0" Margin="4,4,0,0" Width="150" Minimum="0.00" Maximum="100" ToolTip="{Binding VolumeText}" LargeChange="1" TickFrequency="0.01" IsSnapToTickEnabled="True" Value="100" ValueChanged="trackBarVolume_ValueChanged" />

            <StackPanel Grid.Row="1" Orientation="Horizontal">

               <!-- Stop button -->
               <Button x:Name="btnStop" Width="48" Height="24" Margin="4,0,0,0" Click="btnStop_Click">
                  <Rectangle Width="10" Height="10" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" />
               </Button>

               <!-- Back button -->
               <Button x:Name="btnPrevious" Width="48" Height="24" Margin="4,0,0,0" Click="btnPrevious_Click">
                  <Path Width="24" Height="10" Stretch="Fill" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" Data="F1 M 64,48L 64,32L 32,48L 32,32L 24,32L 24,64L 32,64L 32,48L 64,64L 64,48L 96,64L 96,32L 64,48 Z "/>
               </Button>

               <!-- Forward button -->
               <Button x:Name="btnNext" Width="48" Height="24" Margin="-1,0,0,0" Click="btnNext_Click">
                  <Path Width="24" Height="10" Stretch="Fill" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" Data="F1 M 56,40L 56,24L 88,40L 88,24L 96,24L 96,56L 88,56L 88,40L 56,56L 56,40L 24,56L 24,24L 56,40 Z "/>
               </Button>
            </StackPanel>
         </Grid>

         <!-- Play Information -->
         <Border DockPanel.Dock="Left" Margin="4" Padding="4" CornerRadius="8" BorderThickness="1" BorderBrush="{StaticResource Brush.InformationArea.Border}" Background="{StaticResource Brush.InformationArea.Background}">
            <DockPanel>
               <StackPanel DockPanel.Dock="Left" Orientation="Vertical">
                  <TextBlock x:Name="txtTitle" Margin="4" Foreground="{StaticResource Brush.InformationArea.Foreground}" Text="" TextTrimming="WordEllipsis" />

                  <DockPanel Margin="4,0,4,0">
                     <TextBlock x:Name="txtTime" DockPanel.Dock="Left" Foreground="{StaticResource Brush.InformationArea.Foreground}" />         
                     <Slider x:Name="trackBar" DockPanel.Dock="Left"
                        Margin="4,0,4,0"
                        Minimum="0.0"
                                    ScrollBar.Scroll="trackBar_Scroll"/>
                  </DockPanel>
               </StackPanel>
            </DockPanel>
         </Border>      
      </DockPanel>
      <Button x:Name="btnOpenFile" Margin="-16.336,8,546,4.04" Grid.Column="1" Grid.Row="1" Click="btnOpenFile_Click">
         <StackPanel Orientation="Horizontal">
            <Path Width="12" Height="14"  Stretch="Fill" Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}"  Data="F1 M 21.5818,16.3427C 21.1897,17.1909 20.5874,18.1576 19.7749,19.2428C 18.9623,20.328 18.2602,21.0934 17.6686,21.5389L 16.8186,20.6301C 17.3639,20.1703 17.9537,19.4665 18.5881,18.5184C 19.2011,17.6239 19.6466,16.8185 19.9245,16.1021C 20.1241,15.5889 20.2239,15.0472 20.2239,14.477C 20.2239,13.2937 19.8746,12.3725 19.1761,11.7132C 17.9608,10.5941 16.5353,9.41443 14.8994,8.17417C 13.5059,7.11212 12.5365,6.29064 11.9913,5.70972L 11.9913,24.3348C 11.9913,25.3077 11.6509,26.2753 10.9702,27.2376C 10.236,28.2676 9.23456,29.0944 7.9658,29.7181C 6.99642,30.1885 5.98783,30.4237 4.94003,30.4237C 3.11531,30.4237 1.9802,29.9194 1.53471,28.9109C 1.39928,28.6079 1.33156,28.2747 1.33156,27.9112C 1.33156,27.0451 1.65945,26.1898 2.31521,25.3451C 3.04225,24.447 4.00094,23.7699 5.19129,23.3137C 5.91477,23.0357 6.70596,22.8967 7.56486,22.8967C 8.46653,22.8967 9.31831,23.0304 10.1202,23.2977L 10.1202,1L 11.4887,1C 11.7453,1.70565 12.8306,2.92451 14.7444,4.65659C 16.6154,6.29955 18.4812,7.94253 20.3415,9.58549C 21.6138,10.7259 22.25,12.0499 22.25,13.5575C 22.25,14.4413 22.0273,15.3697 21.5818,16.3427 Z " RenderTransformOrigin="-1.25,0.503"/>
            <TextBlock Text="Open File"/>
         </StackPanel>               
      </Button>
    </Grid>
</Window>


Main.xaml.cs

Mã: Chọn hết

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Shapes;
using System.IO;
using Un4seen.Bass;
using System.Collections;
using System.Timers;
using Microsoft.Win32;
using System.Windows.Threading;

namespace WpfMp3Player
{
    /// <summary>
    /// Interaction logic for Main.xaml
    /// </summary>
    public partial class Main : Window
    {
        public Main()
        {
            InitializeComponent();
           // BassNet.Registration("thanhtu162000@gmail.com", "2X18313623152222");
        }
        public static Audio m_Audio = new Audio();
        bool scroling = false;
        int minut;
        public static MP3Playlist playlist = new MP3Playlist();
        public static bool flag = false;
        public static bool captionFlag = false;
        MP3File mp3;
     //   Int32 i = 0;

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            if (false == Bass.BASS_Init(-1, 96000, BASSInit.BASS_DEVICE_CPSPEAKERS,System.IntPtr.Zero))
            {
                MessageBox.Show("Lỗi xảy ra khi khởi tạo BASS!");
                System.Environment.Exit(0);
            }
            //
            DispatcherTimer timer = new DispatcherTimer();
            timer.Tick += new EventHandler(timer1_Tick);
            timer.Interval = new TimeSpan(0, 0, 1);
            timer.Start();
            //
            m_Audio.Volume = long.Parse(trackBarVolume.Value.ToString());
        }
        private void btnPlay_Click(object sender, RoutedEventArgs e)
        {
            if (playlist.countPlaylist() >= 0)
            {
                if (!m_Audio.IsPlay)
                {
                    play();
                }
                else
                {
                    m_Audio.Pause();
                }
            }
        }

        private void btnStop_Click(object sender, RoutedEventArgs e)
        {
            m_Audio.Stop();
            txtTime.Text = "00:00 / 00:00";
            trackBar.Value = 0;
        }

        private void btnPrevious_Click(object sender, RoutedEventArgs e)
        {
            if (playlist.countPlaylist() >= 0)
            {
                if (playlist.IsSeleted == 0)
                {
                    playlist.IsSeleted = playlist.countPlaylist();
                    flag = false;
                    play();
                }
                else
                {
                    playlist.IsSeleted -= 1;
                    flag = false;
                    play();
                }
            }
        }

        private void btnNext_Click(object sender, RoutedEventArgs e)
        {
            if (playlist.countPlaylist() >= 0)
            {
                if (playlist.IsSeleted == (playlist.countPlaylist()))
                {
                    playlist.IsSeleted = 0;
                    flag = false;
                    play();
                }
                else
                {
                    playlist.IsSeleted += 1;
                    flag = false;
                    play();

                }
            }
        }
        private void trackBarVolume_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            m_Audio.Volume = (long)(trackBarVolume.Value);
        }

        private void trackBar_Scroll(object sender, System.Windows.Controls.Primitives.ScrollEventArgs e)
        {
            m_Audio.Position = long.Parse(trackBar.Value.ToString());
        }
        public string GetTimeMinutsAndSeconds(int second)
        {
            minut = second / 60;
            return String.Format("{0:00}", (float)minut) + ":" + String.Format("{0:00}", (float)(second % 60));
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (m_Audio.IsPlay)
            {
                trackBar.Maximum = Int32.Parse(m_Audio.Length.ToString());

                txtTime.Text = GetTimeMinutsAndSeconds(Int32.Parse(m_Audio.Position.ToString())) + " / " + GetTimeMinutsAndSeconds(Int32.Parse(m_Audio.Length.ToString()));
                if (scroling != true)
                {
                    trackBar.Value = Int32.Parse(m_Audio.Position.ToString());

                    if ((trackBar.Maximum) == Int32.Parse(m_Audio.Position.ToString()))
                    {
                        playlist.IsSeleted += 1;
                        play();
                    }
                }

            }
            else if (!m_Audio.IsPlay)
            {
                txtTime.Text = "00:00 / 00:00";
                trackBar.Value = 0;
            }
        }
        private void play()
        {
            m_Audio.Stop();
            m_Audio = new Audio(playlist.selectPlaylist(playlist.IsSeleted).FileFullPath);
            txtTitle.Text = m_Audio.Name;
            captionFlag = false;
            m_Audio.Play();
        }
        private void btnOpenFile_Click(object sender, RoutedEventArgs e)
        {
            var dr = new OpenFileDialog() { Filter = "All files| *.*", Multiselect = true };
            var isOK   = dr.ShowDialog();
            if (isOK.Value)
            {
                String[] listFilename = dr.FileNames;
                playlist.Clear();
                foreach (string fileName in listFilename)
                {
                    mp3 = new MP3File();
                    mp3.FileName = System.IO.Path.GetFileName(fileName);
                    mp3.FileFullPath = fileName;
                    playlist.addPlaylist(mp3);

                }
                playlist.IsSeleted = 0;
                flag = false;
            }
        } 
    }
}


Audio.cs

Mã: Chọn hết

using System;
using System.Collections.Generic;
using System.Text;
using Un4seen.Bass;
using Bass = Un4seen.Bass.Bass;
using System.Runtime.InteropServices;

namespace WpfMp3Player
{
    public class Audio
    {
       
        public enum AudioType
        {
            //Sound
            Windows = 1,
            MP3 = 2,
            Flac = 3,
            Wv = 4,
            Mpc = 5,
            Ape = 6,
            Apl = 7,
            Alac = 8,
            Ac3 = 9,
            M4a = 10,
            Aac = 11,
            Ofr = 12,
            Ofs = 13,
            Tta = 14,
            Other = 15,
        }
       
        private AudioType _Type;
        public AudioType Type
        {
            get
            {
                return _Type;
            }
            set
            {
                _Type = value;
            }
        }

        private int  _Stream;
        public int Stream
        {
            get
            {
                return _Stream;
            }
            set
            {
                _Stream = value;
            }
        }

        private bool  _Pause;
        public bool  IsPause
        {
            get
            {
                return _Pause;
            }
            set
            {
                _Pause = value;
            }
        }
        private bool _Play;
        public bool IsPlay
        {
            get
            {
                return _Play;
            }
            set
            {
                _Play = value;
            }
        }
        private long  _Length;
        public  long Length
        {
            get
            {
                if (this.Stream != 0)
                {
                    long len = Bass.BASS_ChannelGetLength (this.Stream );
                    _Length =(long)Bass.BASS_ChannelBytes2Seconds (this.Stream,len);
                }
                return _Length;
            }
        }

        private long  _Position;
        public long  Position
        {
            get
            {
                if (this.Stream != 0)
                {
                    long pos = Bass.BASS_ChannelGetPosition(this.Stream);
                    _Position = (long)Bass.BASS_ChannelBytes2Seconds(this.Stream, pos);
                }
                return _Position;
            }
            set
            {
                if (this.Stream != 0)
                {
                    Bass.BASS_ChannelSetPosition(this.Stream, Bass.BASS_ChannelSeconds2Bytes(this.Stream, value));
                    _Position = value;
                }
            }
        }

        private long  _Volume;
        public long  Volume
        {
            set
            {
                if (this.Stream != 0)
                {
                    Bass.BASS_ChannelSetAttribute(this.Stream, Un4seen.Bass.BASSAttribute.BASS_ATTRIB_VOL, value  / 100.0F);
                    _Volume = value;
                }
            }
           
        }

        private string _File;
        public string File
        {
            get
            {
                return _File;
            }
            set
            {
                _File = value;
            }
        }

        private string _Name;
        public string Name
        {
            get
            {
                return _Name;
            }
            set
            {
                _Name = value;
            }
        }
        public Audio()
        {
           
        }

        public Audio(string sFileName)
        {
            this.File = sFileName;
            this.Name = System.IO.Path.GetFileName(sFileName);
            string sType = System.IO.Path.GetExtension(sFileName);
            switch (sType)
            {
                case ".wma":
                    this.Type = AudioType.Windows;
                    this.Stream = Un4seen.Bass.AddOn.Wma.BassWma.BASS_WMA_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".mp3":
                    this.Type = AudioType.MP3;
                    this.Stream = Bass.BASS_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".flac":
                    this.Type = AudioType.Flac;
                    this.Stream = Un4seen.Bass.AddOn.Flac.BassFlac.BASS_FLAC_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".wv":
                    this.Type = AudioType.Wv;
                    this.Stream = Un4seen.Bass.AddOn.Wv.BassWv.BASS_WV_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".mpc":
                    this.Type = AudioType.Mpc;
                    this.Stream = Un4seen.Bass.AddOn.Mpc.BassMpc.BASS_MPC_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".ape":
                    this.Type = AudioType.Ape;
                    this.Stream = Un4seen.Bass.AddOn.Ape.BassApe.BASS_APE_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".apl":
                    this.Type = AudioType.Apl;
                    this.Stream = Un4seen.Bass.AddOn.Ape.BassApe.BASS_APE_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".alac":
                    this.Type = AudioType.Alac;
                    this.Stream = Un4seen.Bass.AddOn.Alac.BassAlac.BASS_ALAC_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".ac3":
                    this.Type = AudioType.Ac3;
                    this.Stream = Un4seen.Bass.AddOn.Ac3.BassAc3.BASS_AC3_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".m4a":
                    this.Type = AudioType.M4a;
                    this.Stream = Un4seen.Bass.AddOn.Aac.BassAac.BASS_MP4_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".aac":
                    this.Type = AudioType.Aac;
                    this.Stream = Un4seen.Bass.AddOn.Aac.BassAac.BASS_AAC_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".ofr":
                    this.Type = AudioType.Ofr;
                    this.Stream = Un4seen.Bass.AddOn.Ofr.BassOfr.BASS_OFR_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".ofs":
                    this.Type = AudioType.Ofs;
                    this.Stream = Un4seen.Bass.AddOn.Ofr.BassOfr.BASS_OFR_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                case ".tta":
                    this.Type = AudioType.Tta;
                    this.Stream = Un4seen.Bass.AddOn.Tta.BassTta.BASS_TTA_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_DEFAULT);
                    break;
                default:
                    this.Type = AudioType.Other;
                    this.Stream = Bass.BASS_StreamCreateFile(this.File, 0, 0, Un4seen.Bass.BASSFlag.BASS_SAMPLE_FLOAT);
                    break;
            }
        }

        public void Pause()
        {
            this.IsPause = !this.IsPause;
            if (this.IsPause)
            {
                if (this.Stream != 0) Bass.BASS_ChannelPause(this.Stream);
            }
            else
            {
                if (this.Stream != 0) Bass.BASS_ChannelPlay(this.Stream, false);
            }
        }

        public void Play()
        {
            if (this.Stream != 0)
            {
                Bass.BASS_ChannelPlay(this.Stream, false);
                this.IsPause = false;
                this.IsPlay = true;
            }
        }
        public void Stop()
        {
            if (this.Stream != 0)
            {
                Bass.BASS_ChannelStop(this.Stream);
                Bass.BASS_SampleFree(this.Stream);
                this.IsPause = false;
                this.IsPlay = false;
            }
        }
    }
}


MP3File.cs

Mã: Chọn hết

using System;
namespace WpfMp3Player
{
    public class MP3File
    {
        private string fileName;
        private string fileFullPath;
        private string artistName;
        private string albumName;
        private int trackNumber;
        private string songTitle;
        private string time;
        private string genre;

        public string FileName
        {
            get { return this.fileName; }
            set { this.fileName = value; }
        }
        public string ArtistName
        {
            get { return this.artistName; }
            set { this.artistName = value; }
        }
        public string AlbumName
        {
            get { return this.albumName; }
            set { this.albumName = value; }
        }
        public int TrackNumber
        {
            get { return this.trackNumber; }
            set { this.trackNumber = value; }
        }
        public string SongTitle
        {
            get { return this.songTitle; }
            set { this.songTitle = value; }
        }
        public string Time
        {
            get { return this.time; }
            set { this.time = value; }
        }
        public string Genre
        {
            get { return this.genre; }
            set { this.genre = value; }
        }
        public string FileFullPath
        {
            get
            {
                return fileFullPath;
            }
            set
            {
                fileFullPath = value;
            }
        }
        public MP3File()
        {
        }
    }
}


MP3Playlist.cs

Mã: Chọn hết

using System;
namespace WpfMp3Player
{
    public class MP3File
    {
        private string fileName;
        private string fileFullPath;
        private string artistName;
        private string albumName;
        private int trackNumber;
        private string songTitle;
        private string time;
        private string genre;

        public string FileName
        {
            get { return this.fileName; }
            set { this.fileName = value; }
        }
        public string ArtistName
        {
            get { return this.artistName; }
            set { this.artistName = value; }
        }
        public string AlbumName
        {
            get { return this.albumName; }
            set { this.albumName = value; }
        }
        public int TrackNumber
        {
            get { return this.trackNumber; }
            set { this.trackNumber = value; }
        }
        public string SongTitle
        {
            get { return this.songTitle; }
            set { this.songTitle = value; }
        }
        public string Time
        {
            get { return this.time; }
            set { this.time = value; }
        }
        public string Genre
        {
            get { return this.genre; }
            set { this.genre = value; }
        }
        public string FileFullPath
        {
            get
            {
                return fileFullPath;
            }
            set
            {
                fileFullPath = value;
            }
        }
        public MP3File()
        {
        }
    }
}



Quay về “[.NET] Mã nguồn chương trình tiện ích”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách