WPF中的音频——(5)

         MediaPlayer比起SoundPlayer来说,有很大的灵活性,但它仍然是为程序代码设计的。为了方便在XAML中能使用它,WPF提供了一个MediaElement类,它封装了MediaPlayer类,如同SoundPlayerAction封装了SoundPlayer一样。

         MediaElement继承自FrameworkElement,因此,它可以嵌入用户界面参与布局。通过为MediaElementSource属性赋一个音频文件的Uri,它就能在加载之后进行播放。且MediaElement提供了MediaPlayer的许多属性和事件,方便用户在XAML中进行设置。

         如果你想控制MediaElement的播放,那么,你应该试着用MediaTimeline的动画来设置MediaElementSource属性。当MediaTimelineTargetNameMediaElement时,将依据设置的媒体源自动创建一个MediaClock并将其分配给MediaElement关联的播放器(MediaPlayer)MediaElement关联的播放器得到MediaClock后,会工作在时钟模式,自动进行媒体的播放。另外,通过MediaTimeline设置的DurationBeginTime等属性,都能关联到MediaElement上,从而控制媒体源播放的时间和开始时间等。

使用MediaElementMediaTimeline来播放音频文件的代码如下:

    <MediaElement Name="audio"/>

    <Button Content="Play">

        <Button.Triggers>

            <EventTrigger RoutedEvent="Button.Click">

                <BeginStoryboard>

                    <Storyboard>

                        <MediaTimeline Source="BLOW.WAV" Storyboard.TargetName="audio"/>

                    </Storyboard>

                </BeginStoryboard>

            </EventTrigger>

        </Button.Triggers>

    </Button>

          除了BeginStoryboard外,可以对同一个Storyboard使用PauseStoryboardResumeStoryboardSeekStoryboardStopStoryboard动作分别来暂停、继续、Seek、停止一段音频。

         如果想循环听一段背景音乐,可以设置MediaTimelineRepeatBehaviorForever或“3x”等。

         如果不想在XAML中完成音频的控制动作,想挪到后台代码中,那么,你首先需要设置MediaElementLoadedBehavior属性为Manual(且MediaElement不是MediaTimeline的动画目标,否则它的行为始终受MediaClockClock影响,无法交互式控制),才能使用PlayPauseStop方法交互式控制媒体。

posted on 2009-03-11 23:14  xirihanlin  阅读(2543)  评论(0编辑  收藏  举报