Play Audio Asynchronously


   
  
<Window x:Class="SoundAndVideo.SoundPlayerTest"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="SoundPlayerTest" Height="300" Width="300" Closed="window_Closed">
    <StackPanel>
       <Button Click="cmdPlayAudioAsync_Click">Play Audio Asynchronously</Button>
    </StackPanel>
</Window>
//File:Window.xaml.cs

using System;
using System.Collections.Generic;
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.Media;
using System.ComponentModel;
using System.IO;

namespace SoundAndVideo
{
    public partial class SoundPlayerTest : System.Windows.Window
    {
        MediaPlayer player = new MediaPlayer();

        public SoundPlayerTest()
        {
            InitializeComponent();
        }
        private void cmdPlayAudioAsync_Click(object sender, RoutedEventArgs e)
        {
            SoundPlayer player = new SoundPlayer();
            player.SoundLocation = "test.wav";
            player.Load();
            player.Play();
        }

        private void window_Closed(object sender, EventArgs e)
        {
            player.Close();
        }
    }
}

   
    
     


Play with MediaPlayer


   
  
<Window x:Class="SoundAndVideo.SoundPlayerTest"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="SoundPlayerTest" Height="300" Width="300" Closed="window_Closed">
    <StackPanel>
          <Button Click="cmdPlayWithMediaPlayer_Click">Play with MediaPlayer</Button>
    </StackPanel>
</Window>

//File:Window.xaml.cs
using System;
using System.Collections.Generic;
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.Media;
using System.ComponentModel;
using System.IO;

namespace SoundAndVideo
{
    public partial class SoundPlayerTest : System.Windows.Window
    {
        MediaPlayer player = new MediaPlayer();

        public SoundPlayerTest()
        {
            InitializeComponent();
        }
        private void cmdPlayWithMediaPlayer_Click(object sender, RoutedEventArgs e)
        {            
            player.Open(new Uri("test.mp3", UriKind.Relative));
            player.Play();
        }

        private void window_Closed(object sender, EventArgs e)
        {
            player.Close();
        }
    }
}

   
    
     


Sound And Video Playback in Code


   
  

<Window x:Class="SoundAndVideo.CodePlayback"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="CodePlayback" Height="300" Width="300"
    xmlns:local="clr-namespace:SoundAndVideo">
  <Window.Resources>
    <local:TimeSpanConverter x:Key="TimeSpanConverter"></local:TimeSpanConverter>
  </Window.Resources>
    <StackPanel Orientation="Horizontal">      
      <MediaElement Name="media" LoadedBehavior="Manual" UnloadedBehavior="Close" Source="test.mp3" MediaOpened="media_MediaOpened"></MediaElement>

      <Button Click="cmdPlay_Click">Play</Button>
      <Button Click="cmdStop_Click">Stop</Button>
      <Button Click="cmdPause_Click">Pause</Button>      
      <TextBlock>Volume:</TextBlock>
      <Slider Minimum="0" Maximum="1" Value="{Binding ElementName=media, Path=Volume, Mode=TwoWay}"></Slider>
      <TextBlock>Balance: </TextBlock>
      <Slider Minimum="-1" Maximum="1" Value="{Binding ElementName=media, Path=Balance, Mode=TwoWay}"></Slider>
      <TextBlock>Speed: </TextBlock>
      <Slider Minimum="0" Maximum="2" Value="{Binding ElementName=media, Path=SpeedRatio}"></Slider>
      <TextBlock>Seek To: </TextBlock>
      <Slider Minimum="0" Name="sliderPosition" TickPlacement="BottomRight" TickFrequency="1"
               ValueChanged="sliderPosition_ValueChanged"></Slider>
      <TextBlock Name="lblTime"></TextBlock>
  </StackPanel>

</Window>

//File:Window.xaml.cs

using System;
using System.Collections.Generic;
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.Windows.Media.Animation;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Data;
namespace SoundAndVideo
{
    public partial class CodePlayback : System.Windows.Window
    {
        public CodePlayback()
        {
            InitializeComponent();
        }
        private void sliderSpeed_ValueChanged(object sender, RoutedEventArgs e)
        {
             media.SpeedRatio = ((Slider)sender).Value;
        }

        private void cmdPlay_Click(object sender, RoutedEventArgs e)
        {
            media.Play();
        }
        private void cmdPause_Click(object sender, RoutedEventArgs e)
        {
            media.Pause();
        }
        private void cmdStop_Click(object sender, RoutedEventArgs e)
        {            
            media.Stop();
            media.SpeedRatio = 1;
        }
        private void media_MediaOpened(object sender, RoutedEventArgs e)
        {
            sliderPosition.Maximum = media.NaturalDuration.TimeSpan.TotalSeconds;
        }
        private void sliderPosition_ValueChanged(object sender, RoutedEventArgs e)
        {
            media.Pause();
            media.Position = TimeSpan.FromSeconds(sliderPosition.Value);
            media.Play();
        }
    }
    public class TimeSpanConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
        {
            try
            {
                TimeSpan time = (TimeSpan)value;
                return time.TotalSeconds;
            }
            catch
            {
                return 0;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
        {
            double seconds = (double)value;
            return TimeSpan.FromSeconds(seconds);
        }
    }

}

   
    
     


Play a Media File


   
  
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF" Height="450" Width="300">
    <StackPanel x:Name="Panel">
        <StackPanel.Triggers>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnPlay">
                <EventTrigger.Actions>
                    <BeginStoryboard Name="ClockStoryboard">
                        <Storyboard x:Name="Storyboard"  SlipBehavior="Slip"
                                    CurrentTimeInvalidated="Storyboard_Changed">
                            <MediaTimeline BeginTime="0" Source="c:a.avi" 
                                 Storyboard.TargetName="meMediaElement"
                                 RepeatBehavior="Forever" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnPause">
                <EventTrigger.Actions>
                    <PauseStoryboard BeginStoryboardName="ClockStoryboard" />
                </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnResume">
                <EventTrigger.Actions>
                    <ResumeStoryboard BeginStoryboardName="ClockStoryboard" />
                </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="Button.Click" SourceName="btnStop">
                <EventTrigger.Actions>
                    <StopStoryboard BeginStoryboardName="ClockStoryboard" />
                </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="Slider.PreviewMouseLeftButtonDown" 
                              SourceName="sldPosition" >
                <PauseStoryboard BeginStoryboardName="ClockStoryboard" />
            </EventTrigger>
            <EventTrigger RoutedEvent="Slider.PreviewMouseLeftButtonUp" 
                              SourceName="sldPosition" >
                <ResumeStoryboard BeginStoryboardName="ClockStoryboard" />
            </EventTrigger>
        </StackPanel.Triggers>

        <MediaElement Name="meMediaElement" HorizontalAlignment="Center"
                      Margin="5" MinHeight="300" Stretch="Fill"
                      MediaOpened="MediaOpened" />
        <Button Content="_Play" Name="btnPlay" />
        <Button Content="P_ause" Name="btnPause" />
        <Button Content="_Resume" Name="btnResume" />
        <Button Content="_Stop" Name="btnStop" />
        <Slider HorizontalAlignment="Center" Margin="5" 
                Name="sldPosition" Width="250"
                ValueChanged="sldPosition_ValueChanged">
        </Slider>
        <TextBlock Text="Volume:"/>
        <Slider Minimum="0" Maximum="1" TickFrequency="0.1" TickPlacement="TopLeft" Value="{Binding ElementName=meMediaElement, Path=Volume, Mode=TwoWay}" />
        <TextBlock Text="Balance:"/>
        <Slider Minimum="-1" Maximum="1" TickFrequency="0.2" TickPlacement="TopLeft" Value="{Binding ElementName=meMediaElement, Path=Balance, Mode=TwoWay}" />
    </StackPanel>
</Window>
//File:Window.xaml.cs

using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;

namespace WpfApplication1
{
    public partial class Window1 : Window
    {
        bool ignoreValueChanged = false;

        public Window1()
        {
            InitializeComponent();
        }
        private void MediaOpened(object sender, EventArgs e)
        {
            sldPosition.Maximum = meMediaElement.NaturalDuration.TimeSpan.TotalMilliseconds;
        }
        private void Storyboard_Changed(object sender, EventArgs e)
        {
            ClockGroup clockGroup = sender as ClockGroup;
            MediaClock mediaClock = clockGroup.Children[0] as MediaClock;
            if (mediaClock.CurrentProgress.HasValue){
                ignoreValueChanged = true;
                sldPosition.Value = meMediaElement.Position.TotalMilliseconds;
                ignoreValueChanged = false;
            }
        }
        private void sldPosition_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e){
            if (ignoreValueChanged)
            {
                return;
            }
            Storyboard.Seek(Panel,TimeSpan.FromMilliseconds(sldPosition.Value),TimeSeekOrigin.BeginTime);
        }
    }
}

   
    
     


Declarative Playback


   
      

<Window x:Class="SoundAndVideo.DeclarativePlayback"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="DeclarativePlayback" Height="300" Width="300">
  <Window.Resources>
      <Storyboard x:Key="MediaStoryboardResource" SlipBehavior="Slip">
      <MediaTimeline Storyboard.TargetName="media" Source="c:song.mp3" FillBehavior="HoldEnd"></MediaTimeline>
      </Storyboard>
  </Window.Resources>
  
    <Grid Margin="5">
      <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        
      </Grid.RowDefinitions>
        <Grid.Triggers>          
            <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="cmdPlay">
              <EventTrigger.Actions>
                <BeginStoryboard Name="MediaStoryboard" Storyboard="{StaticResource MediaStoryboardResource}"/>
              </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="cmdStop">
              <EventTrigger.Actions>
                <StopStoryboard BeginStoryboardName="MediaStoryboard"/>
              </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="cmdPause">
              <EventTrigger.Actions>
                <PauseStoryboard BeginStoryboardName="MediaStoryboard"/>
              </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="cmdResume">
              <EventTrigger.Actions>
                <ResumeStoryboard BeginStoryboardName="MediaStoryboard"/>
              </EventTrigger.Actions>
            </EventTrigger>          
        </Grid.Triggers>

      <MediaElement Name="media"></MediaElement>
      <StackPanel Orientation="Horizontal">
        <Button Name="cmdPlay" Padding="5" Margin="1">Play</Button>
        <Button Name="cmdStop" Padding="5" Margin="1">Stop</Button>
        <Button Name="cmdPause" Padding="5" Margin="1">Pause</Button>
        <Button Name="cmdResume" Padding="5" Margin="1">Resume</Button>
        </StackPanel>

      <Grid Margin="0,10,0,0" Grid.Row="2">
        <Grid.RowDefinitions>
          <RowDefinition Height="Auto"></RowDefinition>
          <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="Auto"></ColumnDefinition>
          <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBlock Margin="5">Volume: </TextBlock>
        <Slider Grid.Column="1" Minimum="0" Maximum="1"
              Value="{Binding ElementName=media, Path=Volume, Mode=TwoWay}"></Slider>
        <TextBlock Margin="5" Grid.Row="1">Balance: </TextBlock>
      <Slider Grid.Row="1" Grid.Column="1" Minimum="-1" Maximum="1"
        Value="{Binding ElementName=media, Path=Balance, Mode=TwoWay}"></Slider>
      </Grid>
    </Grid>
  
</Window>

   
    
    
    
    
    
     


Play wav file


   
   
<Window x:Class="SoundAndVideo.MultipleSounds"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MultipleSounds" Height="300" Width="300">
    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
      </Grid.RowDefinitions>
      <MediaElement x:Name="media1" Volume="0.25"></MediaElement>
      <MediaElement x:Name="media2" Volume="1"></MediaElement>
      <Button>
        <Button.Content>Click.</Button.Content>
        <Button.Triggers>
          <EventTrigger RoutedEvent="Button.Click">
            <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard>
                <MediaTimeline Source="c:song.mp3" Storyboard.TargetName="media1"></MediaTimeline>
              </Storyboard>
            </BeginStoryboard>
            </EventTrigger.Actions>
          </EventTrigger>
        </Button.Triggers>
      </Button>

      <Button Grid.Row="1">
        <Button.Content >wav</Button.Content>
        <Button.Triggers>
          <EventTrigger RoutedEvent="Button.Click">
            <EventTrigger.Actions>
              <BeginStoryboard>
                <Storyboard>
                  <MediaTimeline Source="c:song.wav" Storyboard.TargetName="media2"></MediaTimeline>
                </Storyboard>
              </BeginStoryboard>
            </EventTrigger.Actions>
          </EventTrigger>
        </Button.Triggers>
      </Button>
    </Grid>
</Window>

   
    
    
     


Play mp3 file


   
   
<Window x:Class="SoundAndVideo.MultipleSounds"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MultipleSounds" Height="300" Width="300">
    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
      </Grid.RowDefinitions>
      <MediaElement x:Name="media1" Volume="0.25"></MediaElement>
      <MediaElement x:Name="media2" Volume="1"></MediaElement>
      <Button>
        <Button.Content>Click.</Button.Content>
        <Button.Triggers>
          <EventTrigger RoutedEvent="Button.Click">
            <EventTrigger.Actions>
            <BeginStoryboard>
              <Storyboard>
                <MediaTimeline Source="c:song.mp3" Storyboard.TargetName="media1"></MediaTimeline>
              </Storyboard>
            </BeginStoryboard>
            </EventTrigger.Actions>
          </EventTrigger>
        </Button.Triggers>
      </Button>

      <Button Grid.Row="1">
        <Button.Content >wav</Button.Content>
        <Button.Triggers>
          <EventTrigger RoutedEvent="Button.Click">
            <EventTrigger.Actions>
              <BeginStoryboard>
                <Storyboard>
                  <MediaTimeline Source="c:song.wav" Storyboard.TargetName="media2"></MediaTimeline>
                </Storyboard>
              </BeginStoryboard>
            </EventTrigger.Actions>
          </EventTrigger>
        </Button.Triggers>
      </Button>
    </Grid>
</Window>