Wpf 简明教程

WPF - Multimedia

WPF 应用程序使用 MediaElement 支持视频和音频。它允许您将音频和视频集成到应用程序中。MediaElement 类的工作方式类似于 Image 类。您只需将它指向媒体,它就会呈现媒体。主要区别在于它将是一个动态图像,但是,如果您将它指向仅包含音频且不包含视频(比如 MP3)的文件,它将播放该文件而不会在屏幕上显示任何内容。

WPF 支持所有类型的视频/音频格式,具体取决于计算机配置。如果媒体文件在媒体播放器中播放,它在同一台计算机上的 WPF 中也可以播放。

Example

让我们用一个示例,来了解如何在应用程序中集成多媒体。

  1. 使用名称 WPFMultimedia 创建一个新的 WPF 项目。

  2. 下列 XAML 代码创建一个媒体元素和三个按钮,并用一些属性初始化它们。

<Window x:Class = "WPFMultimedia.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:WPFMultimedia"
   mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "604">

   <Grid>
      <StackPanel HorizontalAlignment = "Center" VerticalAlignment = "Center">
         <MediaElement Name = "myMedia" Source = "D:\MicrosoftMVA.mp4"
            LoadedBehavior = "Manual" Width = "591" Height = "274" />
         <StackPanel Orientation = "Horizontal" Margin = "0,10,0,0">
            <Button Content = "Play" Margin = "0,0,10,0" Padding = "5" Click = "mediaPlay" />
            <Button Content = "Pause" Margin = "0,0,10,0" Padding = "5" Click = "mediaPause" />
            <Button x:Name = "muteButt" Content = "Mute" Padding = "5" Click = "mediaMute" />
         </StackPanel>
      </StackPanel>
   </Grid>

</Window>

这是使用 C# 实现不同按钮的点击事件。

using System;
using System.Windows;

namespace WPFMultimedia {

   public partial class MainWindow : Window {

      public MainWindow() {
         InitializeComponent();
         myMedia.Volume = 100;
         myMedia.Play();
      }

      void mediaPlay(Object sender, EventArgs e) {
         myMedia.Play();
      }

      void mediaPause(Object sender, EventArgs e) {
         myMedia.Pause();
      }

      void mediaMute(Object sender, EventArgs e) {

         if (myMedia.Volume == 100) {
            myMedia.Volume = 0;
            muteButt.Content = "Listen";
         }
         else {
            myMedia.Volume = 100;
            muteButt.Content = "Mute";
         }
      }
   }
}

当您编译并执行以上代码时,它将生成以下窗口。你可以播放视频,并使用三个按钮控制播放。

multimedia

借助这些按钮,你可以暂停、静音和播放视频。

Speech Synthesizer

WPF 具有将文本转换为语音的功能。此 API 包含在 System.Speech 命名空间中。 SpeechSynthesizer 类将文本转换为语音。

Example

我们来看一个简单的示例。

  1. 使用名称 WPFTextToSpeech 创建一个新的 WPF 项目。

  2. 我们将需要 System.Speech 程序集,来将它用作 SpeechSynthesizer 类工作的引用。

  3. 右键单击引用并选择添加引用。

wpf text to speech
  1. “引用管理器”对话框将打开。现在选中 System.Speech 复选框

reference manager dialog
  1. 单击确定按钮。你可以在引用中看到 System.Speech 程序集。

wpf text to speech2
  1. 现在从工具箱中将一个按钮和一个文本框拖到设计窗口中。

  2. 下列 XAML 代码创建一个按钮和一个文本框,并用一些属性初始化它们。

<Window x:Class = "WPFTextToSpeech.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:WPFTextToSpeech"
   mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "604">

   <Grid>
      <Button x:Name = "button" Content = "Speak"
         HorizontalAlignment = "Left" Margin = "218,176,0,0"
         VerticalAlignment = "Top" Width = "75"/>

      <TextBox x:Name = "textBox" HorizontalAlignment = "Left"
         Height = "23" Margin = "60,104,0,0" TextWrapping = "Wrap"
         VerticalAlignment = "Top" Width = "418"/>
   </Grid>

</Window>
  1. 这是使用 C# 进行的一个简单的实现,它将在文本框中将文本转换为语音。

using System.Speech.Synthesis;
using System.Windows;

namespace WPFTextToSpeech {
   /// <summary>
      /// Interaction logic for MainWindow.xaml
   /// </summary>

   public partial class MainWindow : Window {

      public MainWindow() {
         InitializeComponent();
      }

      private void button_Click(object sender, RoutedEventArgs e) {

         if (textBox.Text != "") {
            SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
            speechSynthesizer.Speak(textBox.Text);
         }
         else {
            MessageBox.Show("Write some thing in the textbox!");
         }
      }
   }
}

当您编译并执行以上代码时,它将生成以下窗口。现在,在文本框中键入 Hello World,然后单击“说话”按钮。

multimedia output1

它会产生“Hello World”的语音。如果您没有在文本框中键入任何内容,则会闪烁以下消息。

multimedia output2

我们建议您执行上述示例。