解析WPF實現音頻文件循環順序播放的解決方法_.Net教程

      編輯Tag賺U幣

      推薦:解決.net framework 4.0環境下遇到版本不同編譯不通過的方法詳解
      本篇文章是對.net framework 4.0環境下遇到版本不同編譯不通過的解決方法進行了詳細的分析介紹,需要的朋友參考下

      要做基于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下音頻文件循環順序播放的代碼

      復制代碼 代碼如下:www.wf0088.com

      復制代碼 代碼如下:www.wf0088.com

      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();
      }


      }
      }

      復制代碼 代碼如下:www.wf0088.com

      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教程/更新時間:2013-05-16
      相關.Net教程