华域联盟 .Net 解析WPF实现音频文件循环顺序播放的解决方法

解析WPF实现音频文件循环顺序播放的解决方法

要做基于WPF的音频文件循环顺序播放首先要了解WPF下有哪些类是用于控制音频的. 
WPF下主要有两个音频控制的类,这里做下比较:
    1.SoundPlayer  
    2.MediaPlayer
     派生MediaElement

一.SoundPlayer类  
    1.基于.NET FRAMEWORK 2.0;
    2.可播放WAV音频文件; 
    3.只能播放一个文件,同时播放多个文件会后一个文件的播放操作会终止前一个播放的文件;
    4.不能对音量进行控制;
二.MediaPlayer类
    1.基于WPF; 
    2.支持多种音频文件;
    3.可以同时播放多个声音;
    4.可以调整音量对音频进行控制;
    5.支持设置静音和左右扬声器;
    6.可以控制音频播放速度和获取播放进度和控制进度;     

MediaElement类同MediaPlayer的功能类似,作为WPF页面可用的标签是MediaPlayer的衍生; 
WPF下音频文件循环顺序播放的开发思路:
首先新建一个类继承MediaElement;
这个类包含播放逻辑功能:
    1.读取指定文件夹内的所有音频文件;
    2.将读取的文件路径放入列表;
    3.顺序读取列表中的文件名;
    4.播放音频文件;
    5.播放完毕读取下一个文件名直至列表结尾;
    6.播放音频文件至列表结尾则转制列表头继续播放;
在XAML界面加载这个类;
Window Load事件里执行这个类的播放列表;

下面贴出了WPF下音频文件循环顺序播放的代码:

复制代码 代码如下:

WPF界面代码
 <Window x:Class="MediaApplication.MainWindow"

         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

         xmlns:md="clr-namespace:MediaApplication"

         Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">

     <StackPanel>

         <md:MediaManager x:Name="media"></md:MediaManager>

     </StackPanel>

  </Window>

复制代码 代码如下:

WPF界面CS代码
 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.Navigation;

 using System.IO;

 using System.Collections.ObjectModel;

 using System.Configuration;

 namespace MediaApplication {

     /// <summary>

     /// Interaction logic for MainWindow.xaml

     /// </summary>

     public partial class MainWindow : Window {

         public MainWindow() {

             InitializeComponent();

         }

         private void Window_Loaded(object sender, RoutedEventArgs e) {

             this.media.PlayList();

         }

 

     }

 }

复制代码 代码如下:

MediaManager类
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Controls;

using System.IO;

using System.Configuration;

using System.Windows;

using System.Collections.ObjectModel;

namespace MediaApplication {

    public class MediaManager : MediaElement {

        public MediaManager() {

            try {

                GetAllDirList(new DirectoryInfo(ConfigurationManager.AppSettings["dir"].ToString()));

            } catch {

            }

        }

        public void PlayList() {

            if(files.Count > 0)

            {

                this.UnloadedBehavior = MediaState.Manual;

                this.LoadedBehavior = MediaState.Manual;

                this.MediaEnded += new RoutedEventHandler(media_MediaEnded);

                this.Source = new Uri( files[index], UriKind.RelativeOrAbsolute);

                this.Play();

            } 

        }

        private void GetAllDirList(DirectoryInfo directory) {           

            foreach(string filter in filters)

            {

                foreach (FileInfo file in directory.GetFiles(filter)) {

                    files.Add(file.FullName);

                }

            }

            foreach (DirectoryInfo subDirectory in directory.GetDirectories()) {

                GetAllDirList(subDirectory);

            }

        }

        private void media_MediaEnded(object sender, RoutedEventArgs e) {

            this.Source = new Uri( files[++index % files.Count], UriKind.RelativeOrAbsolute);

            this.Play();

        }

        private ObservableCollection<string> files = new ObservableCollection<string>();

        private int index = 0;

        private string[] filters = new string[] { "*.wav", "*.mp3" };

    }

}

您可能感兴趣的文章:

  • 关于.NET/C#/WCF/WPF 打造IP网络智能视频监控系统的介绍
  • 解析WPF绑定层次结构数据的应用详解
  • 用WPF实现屏幕文字提示的实现方法
  • 在WinForm和WPF中使用GMap.Net地图插件简单教程
  • wpf将表中数据显示到datagrid示例
  • Powershell使用WPF技术实现弹窗提示实例
  • WPF绑定实例详解
  • WPF实现渐变淡入淡出的登陆窗口效果
  • WPF实现类似360安全卫士界面的程序源码分享

本文由 华域联盟 原创撰写:华域联盟 » 解析WPF实现音频文件循环顺序播放的解决方法

转载请保留出处和原文链接:https://www.cnhackhy.com/50197.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部