Pergunta

Eu tenho uma variável MediaLement variável nomeada Testaudio no meu aplicativo Silverlight.

Quando eu clico no botão, ele toca o áudio corretamente.

Mas quando eu clico no botão novamente, ele não toca o áudio.

Como posso fazer o mediarelement jogar pela segunda vez?

Nenhuma das tentativas abaixo para colocar a posição de volta a 0 funcionou:

private void Button_Click_PlayTest(object sender, RoutedEventArgs e)
{
    //TestAudio.Position = new TimeSpan(0, 0, 0);
    //TestAudio.Position = TestAudio.Position.Add(new TimeSpan(0, 0, 0));
    //TestAudio.Position = new TimeSpan(0, 0, 0, 0, 0);
    //TestAudio.Position = TimeSpan.Zero;

    TestAudio.Play();
}
Foi útil?

Solução

Eu encontrei, você só tem que Pare O áudio primeiro e depois define a posição:

TestAudio.Stop();
TestAudio.Position = TimeSpan.Zero;

Outras dicas

Encontrei o exposto acima não funcionava para mim, e a única maneira de fazer o trabalho era criar um mediarelement dinamicamente. Aqui está o código que usei - copiei os valores de um mediarelement chamado MeplayClick que eu inicialmente coloquei no XAML, mas talvez você não precise fazer isso.

    private void Play_MediaSound()
    {
        // Create new media element dynamically
        MediaElement mediaElement = new MediaElement();

        // Reuse settings in XAML 
        mediaElement.Volume = mePlayClick.Volume;
        mediaElement.Source = mePlayClick.Source;
        mediaElement.AutoPlay = mePlayClick.AutoPlay;

        // WHen the media ends, remove the media element
        mediaElement.MediaEnded += (sender, args) =>
        {
            LayoutRoot.Children.Remove(mediaElement);
            mediaElement = null;
        };

        // Add the media element, must be in visual ui tree
        LayoutRoot.Children.Add(mediaElement);

        // When opened, play
        mediaElement.MediaOpened += (sender, args) =>
        {
            mediaElement.Play();
        };
    }

O mediarelement não tem suporte interno para reprodução de loop. Você pode usar o evento mediaend e simplesmente definir a posição de mídia para zero ou pode chamar o método STOP (). Qualquer um vai o colocará no início do seu vídeo/áudio para reprodução.

 public partial class MainPage : UserControl
{
    public MainPage()
    {
        // Required to initialize variables
        InitializeComponent();
        // Used for loopback.
        MyME.MediaEnded += new RoutedEventHandler(MyME_MediaEnded);
    }

    // MediaElement has no looping capabilities so need to set the position back
    // to the begining after the video finishes in order to play again.
    // Or you can use the stop method
    void MyME_MediaEnded(object sender, RoutedEventArgs e)
    {
        //MyME.Position = TimeSpan.Zero;
        MyME.Stop();
    }

    private void BtnPlay_Click(object sender, RoutedEventArgs e)
    {

        MyME.Play();
    }

    private void BtnPause_Click(object sender, RoutedEventArgs e)
    {
        MyME.Pause();
    }

    private void BtnStop_Click(object sender, RoutedEventArgs e)
    {
        MyME.Stop();
    }   

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top