Как непрерывно проигрывать небольшие звуковые файлы в Silverlight? - PullRequest
0 голосов
/ 13 июня 2010

У меня есть два вопроса относительно действия и свойств Silverlight SoundPlay.Мой сценарий выглядит так:

У меня есть две раскадровки: первая раскадровка содержит изображение и звуковой файл;когда приложение silverlight загружается, звук начинает воспроизводиться автоматически, но если кто-то щелкнет изображение, звуковой файл остановится, и вторая раскадровка начнется с новым звуковым файлом.

1) Мой первый вопрос:как остановить первый звуковой файл первой раскадровки, когда вторая раскадровка начинается со второго звукового файла.

2) Мой второй вопрос - как непрерывно воспроизводить звуковой файл;например, в Silverlight мы можем непрерывно играть в раскадровку с помощью RepeatBehavior = "Forever";но я не могу найти способ воспроизвести мой 10-секундный звуковой файл навсегда или непрерывно.

Примечание. Я приложил небольшой файл XAML, чтобы показать, о чем я говорю;Я также заявляю, что если вместо файла изображения, если бы была кнопка, я мог бы остановить первый музыкальный файл после нажатия кнопки и запустить свою вторую раскадровку с новым звуковым файлом, но я хотел бы использовать изображениефайл вместо кнопки.Является ли это возможным?Если да, то как это сделать?

Поэтому, пожалуйста, ответьте на мои следующие два вопроса или дайте большой совет или ссылки на учебные материалы на сайте

1) Как остановить первый звуковой файл первого рассказадоска, когда вторая раскадровка начинается со второго звукового файла (когда активируемый элемент - это изображение вместо кнопки) 2) Как непрерывно воспроизводить 10-секундный звуковой файл?

............ фрагмент кода ......................

XAML ............

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="testPrj.MainPage"
    Width="640" Height="480">
    <UserControl.Resources>
        <Storyboard x:Name="Storyboard1" RepeatBehavior="Forever"/>
        <Storyboard x:Name="Storyboard2"/>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="Red">
        <Button HorizontalAlignment="Left" Margin="212,0,0,111" VerticalAlignment="Bottom" Width="75" Content="Button" Click="onClick"/>
        <MediaElement x:Name="sound2_mp3" Height="0" HorizontalAlignment="Left" Margin="105,230,0,0" VerticalAlignment="Top" Width="0" Source="/sound2.mp3" Stretch="Fill"/>
        <MediaElement x:Name="sound1_mp1" Height="0" HorizontalAlignment="Left" Margin="190,164,0,0" VerticalAlignment="Top" Width="0" Source="/sound1.mp3" Stretch="Fill" AutoPlay="False"/>
    </Grid>
</UserControl>

...............

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace testPrj
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            // Required to initialize variables
            InitializeComponent();
        }

        private void onClick(object sender, System.Windows.RoutedEventArgs e)
        {
            Storyboard1.Stop();
            sound2_mp3.Stop();
            sound1_mp1.Play();

        }
    }
}

1 Ответ

1 голос
/ 13 июня 2010

Обе проблемы решены:

2) Мой второй вопрос - как непрерывно воспроизводить звуковые файлы; например, в Silverlight мы можем непрерывно играть в раскадровку с помощью RepeatBehavior = "Forever"; но я не могу найти способ воспроизвести мой 10-секундный звуковой файл навсегда или непрерывно.

Проблема была решена после добавления обработчика событий MediaEnded;

Теперь мой измененный код XAML: .. .. ...

<MediaElement x:Name="sound2_mp3" Height="0" HorizontalAlignment="Left" Margin="105,230,0,0" VerticalAlignment="Top" Width="0" Source="/sound2.mp3" Stretch="Fill" DataContext="{Binding}" MediaEnded="start" AutoPlay="True" />
        <MediaElement x:Name="sound1_mp1" Height="0" HorizontalAlignment="Left" Margin="190,164,0,0" VerticalAlignment="Top" Width="0" Source="/sound1.mp3" Stretch="Fill" AutoPlay="False" MediaEnded="start1"/>

... ... ...

И мой код за файлом имеет:

    private void start(object sender, RoutedEventArgs e)
    {
        sound2_mp3.Position = TimeSpan.FromSeconds(0);
        sound2_mp3.Play();
    }
    private void start1(object sender, RoutedEventArgs e)
    {
        sound1_mp1.Position = TimeSpan.FromSeconds(0);
        sound1_mp1.Play();
    }

И мой первый вопрос был:

1) Как остановить первый звуковой файл первой раскадровки, когда вторая раскадровка начинается со второго звукового файла (когда активным элементом является изображение вместо кнопки)

Это выполнимо и решено. Я не знаю, почему я не исследовал и не экспериментировал с типами событий элемента изображения. Итак, вывод таков: Если элемент с возможностью щелчка был изображением, событие может быть запущено; например, в следующем фрагменте кода я использую событие MouseLeftButtonUp.

1021 * XAML *

    <Image HorizontalAlignment="Left" Margin="88,239,0,118" Width="95" Source="me1.png" Stretch="Fill" MouseLeftButtonUp="imgGotClicked"/>    

Код позади файла

    private void imgGotClicked(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
          MessageBox.Show("Hello World!");
          Storyboard1.Stop();
          Storyboard2.Begin();
    }

Таким образом, проблема № 1 и проблема № 2 были решены. Проблема этой темы была решена. Поэтому оно должно быть закрыто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...