Silverlight的:公开的音频与特定的开始和结束时间(Silverlight: Expose

2019-10-19 07:18发布

从音频文件我希望能够揭露音频在网页上,但具体起始和终止时间

说我有一个音频文件,它是45:30,例如,我要揭露它的流媒体和 7:25 至8:30之间的下载 ,而且6:209:27之间。

我需要什么,在特殊的服务 ,Silverlight的控制 ,也许这一些示例代码项。

奖金-问题 :有没有已经为这个在线服务?

Answer 1:

勒布,

我认为当你说“暴露”你的意思是为那些子剪辑音频播放控制。

这里有一个建议一步一步建立一个Silverlight应用程序,扮演一个起点和终点之间的音频文件:

第1步:创建与Visual Studio(文件/新建工程/ Silverlight应用程序的样本Silverlight应用程序

第2步:在您的新创建的项目,编辑MainPage.xaml中,然后将用户控件的网格内的下面的代码:

  <StackPanel>
   <MediaElement x:Name="x_MediaElement" AutoPlay="False" Stretch="Uniform" CacheMode="BitmapCache" 
     MediaOpened="OnMediaOpened" MarkerReached="OnMarkerReached" MediaEnded="OnMediaEnded" CurrentStateChanged="OnMediaCurrentStateChanged"
     Source="http://www.shinedraw.com/wordpress/wp-content/uploads/AudioPlayer/littlewaltz.mp3" />

   <StackPanel Orientation="Horizontal">
    <Button x:Name="x_Play" Click="OnPlayClick" Content="Play" Height="20" Width="40" />
    <Button x:Name="x_Pause" Click="OnPauseClick" Content="Pause" Height="20" Width="40" />
    <Button x:Name="x_Stop" Click="OnStopClick" Content="Stop" Height="20" Width="40" />
    <Slider x:Name="x_Timeline" HorizontalAlignment="Stretch" Width="200" Maximum="1" Value="0" ValueChanged="OnTimelineValueChanged"/>
    <TextBlock x:Name="x_CurrentTime" Height="20" Width="75" TextAlignment="Right" HorizontalAlignment="Right" VerticalAlignment="Center" />
    <TextBlock Text="/" Height="20" VerticalAlignment="Center" />
    <TextBlock x:Name="x_TotalTime" Height="20" Width="75" VerticalAlignment="Center" />

    <ToggleButton x:Name="x_Mute" Click="OnMuteClick" Content="Mute" Height="20" Width="40" IsChecked="false" />

    <Slider x:Name="x_VolumeSlider" HorizontalAlignment="Stretch" Width="50" Maximum="1" 
      Value="{Binding ElementName=x_MediaElement, Mode=TwoWay, Path=Volume, UpdateSourceTrigger=Default}"/>
   </StackPanel>
  </StackPanel>

步骤3:编辑MainPage.cs,并用下面的代码替换MainPage类:

 public partial class MainPage : UserControl
 {
  public MainPage()
  {
   InitializeComponent();
   CompositionTarget.Rendering += OnCompositionTargetRendering;
  }

  private void SetStart(TimeSpan timeStart)
  {
   x_MediaElement.Position = timeStart;
  }

  private void SetEnd(TimeSpan timeEnd)
  {
   if (x_MediaElement.Markers == null || x_MediaElement.Markers.Count == 0)
    x_MediaElement.Markers.Add(new TimelineMarker() { Time = timeEnd });
   else
    x_MediaElement.Markers[0].Time = timeEnd;
  }

  private bool _InTickEvent;

  private void OnPlayClick(object sender, RoutedEventArgs e)
  {
   SetStart(new TimeSpan(0,0,10));
   SetEnd(new TimeSpan(0,0,20));
   x_MediaElement.Play();
  }

  private void OnPauseClick(object sender, RoutedEventArgs e)
  {
   x_MediaElement.Pause();
  }

  private void OnStopClick(object sender, RoutedEventArgs e)
  {
   x_MediaElement.Stop();
  }

  private void OnMuteClick(object sender, RoutedEventArgs e)
  {
   x_MediaElement.IsMuted = (bool)x_Mute.IsChecked;
  }

  private void OnMediaOpened(object sender, RoutedEventArgs e)
  {
   x_TotalTime.Text = TimeSpanToString(x_MediaElement.NaturalDuration.TimeSpan);
  }

  private void OnMarkerReached(object sender, TimelineMarkerRoutedEventArgs e)
  {
   x_MediaElement.Stop();
  }

  private void OnMediaEnded(object sender, RoutedEventArgs e)
  {
   x_MediaElement.Stop();
  }

  private void OnTimelineValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
  {
   if (_InTickEvent)
    return; // throw new Exception("Can't call Seek() now, you'll get an infinite loop");

   double percentComplete = x_Timeline.Value;
   TimeSpan duration = x_MediaElement.NaturalDuration.TimeSpan;
   int newPosition = (int)(duration.TotalSeconds * percentComplete);
   x_MediaElement.Position = new TimeSpan(0, 0, newPosition);
  }

  private void OnCompositionTargetRendering(object sender, EventArgs e)
  {
   _InTickEvent = true;

   TimeSpan duration = x_MediaElement.NaturalDuration.TimeSpan;
   if (duration.TotalSeconds != 0)
   {
    double percentComplete = (x_MediaElement.Position.TotalSeconds / duration.TotalSeconds);
    x_Timeline.Value = percentComplete;
    string text = TimeSpanToString(x_MediaElement.Position);
    if (x_CurrentTime.Text != text)
     x_CurrentTime.Text = text;
   }

   _InTickEvent = false;
  }

  private string TimeSpanToString(TimeSpan time)
  {
   return string.Format("{0:00}:{1:00}", (time.Hours * 60) + time.Minutes, time.Seconds);
  }

  private void OnMediaCurrentStateChanged(object sender, RoutedEventArgs e)
  {
   switch (x_MediaElement.CurrentState)
   {
    case MediaElementState.Buffering:
     break;
    case MediaElementState.Opening:
     break;
    case MediaElementState.Paused:
     break;
    case MediaElementState.Playing:
     break;
    case MediaElementState.Stopped:
     break;
   }
  }
 }

第4步:生成和运行!

干杯,吉姆·麦柯迪

面对面软件和YinYangMoney



文章来源: Silverlight: Expose audio with specific start and stop times