Depois de tocar um medielement, como posso tocá -lo de novo?
-
21-09-2019 - |
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();
}
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();
}
}