解析WPF实现音频文件循环顺序播放的解决方法
2013-05-15 00:00
906 查看
要做基于WPF的音频文件循环顺序播放首先要了解WPF下有哪些类是用于控制音频的.
WPF下主要有两个音频控制的类,这里做下比较:
1.SoundPlayer
2.MediaPlayer
派生MediaElement
一.SoundPlayer类
1.基于.NET FRAMEWORK 2.0;
2.可播放W***音频文件;
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下主要有两个音频控制的类,这里做下比较:
1.SoundPlayer
2.MediaPlayer
派生MediaElement
一.SoundPlayer类
1.基于.NET FRAMEWORK 2.0;
2.可播放W***音频文件;
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" }; } }
相关文章推荐
- 解析WPF实现音频文件循环顺序播放的解决方法
- 基于WPF的音频文件循环顺序播放
- 关于语音聊天(wave系列函数播放文件、网络音频)的实现方法
- android实现音频文件播放的方法
- 要求顺序循环队不损失一个空间,全部能够得到有效利用,试采用设置标志位tag的方法解决“假溢出”问题,实现顺序循环队列算法
- 简单的java 播放音频文件方法 (支持音频格式 wav mid aif)
- 解决MPLAYER播放不了多媒体文件的方法。
- javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
- C#中用API实现MP3等音频文件的播放类(转)
- cocos2dx 几个精灵依照顺序播放动画解决方法
- java如何播放mp3格式音频文件,以及如何循环播放音频?
- iOS真机播放MP4视频文件不出来的解决方法 AVPlayer
- directshow实现音频采集设备的输入音量控制和媒体文件播放音量控制
- 解析分别用递归与循环的方式求斐波那契数列的实现方法
- springMVC实现REST开发详解(补充Json解析问题以及静态文件404错误解决办法)
- java 实现音频文件的播放
- C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题
- Android系列之音乐播放器的实现一(播放网络音频文件)
- 利用flash中的Video类播放flv格式文件,每次播放十秒左右就无故停止解决方法
- win7播放swf文件提示错误的解决方法