Воспроизвести аудиофайл в фоновом режиме в приложении Windows8?

Я разрабатываю приложение, которое отображает информацию и в то же время воспроизводит аудиофайл в фоновом режиме. Это приложение для планшетов с Windows 8. Любая помощь или предложение полезно.

Спасибо


person SFO Developer    schedule 12.11.2012    source источник


Ответы (3)


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

private void PauseButton_Click(object sender, RoutedEventArgs e)
{
    myMediaElement.Pause();
}

private void StopButton_Click(object sender, RoutedEventArgs e)
{
    myMediaElement.Stop();
}

private void ForwardButton_Click(object sender, RoutedEventArgs e)
{
    myMediaElement.DefaultPlaybackRate = 0.0;
    myMediaElement.PlaybackRate = 2.0;
}

private void RewindButton_Click(object sender, RoutedEventArgs e)
{
    myMediaElement.DefaultPlaybackRate = 0.0;
    myMediaElement.PlaybackRate = -1.0;
}

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

Лучше всего использовать шаблон MVVM, образец которого можно найти по адресу http://code.msdn.microsoft.com/windowsapps/Background-Audio-c-Metro-d2fc7719/view/SourceCode

Таким образом, дизайн заключается в том, чтобы написать код в одном общем месте и запускать его из внешнего интерфейса.

person Avinash Kumar    schedule 17.11.2012

В XAML у вас будет MediaElement со следующими атрибутами

  <ContentControl x:Name="Host">
            <MediaElement Source="Assets/myMusic.mp3" IsLooping="True" AutoPlay="True" AudioCategory="BackgroundCapableMedia" PosterSource="/Images/placeholder-sdk.png" VerticalAlignment="Center" HorizontalAlignment="Center" Name="myMediaElement" Height="350" Width="640" />
  </ContentControl>

На панели приложений у вас может быть несколько кнопок для управления мультимедиа, например

<Page.BottomAppBar>
    <AppBar Opened="BottomAppBar_Opened" Background="#FF3C3838" x:Name="BottomAppBarColors" Padding="10,0,10,0" AutomationProperties.Name="Bottom App Bar Colors">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50*"/>
                <ColumnDefinition Width="50*"/>
            </Grid.ColumnDefinitions>
            <StackPanel x:Name="LFullScreenLandscapeViewGrid" Orientation="Horizontal" Grid.Column="0" HorizontalAlignment="Left">
                <Button x:Name="Play" Click="PlayButton_Click" Style="{StaticResource PlayAppBarButtonStyle}" Tag="Play"/>
                <Button x:Name="Stop" Click="StopButton_Click" Style="{StaticResource StopAppBarButtonStyle}" Tag="Stop"/>
            </StackPanel>
            <StackPanel Visibility="Collapsed" x:Name="PortraitViewGrid" Orientation="Horizontal" Grid.ColumnSpan="2" HorizontalAlignment="Right">
                <Button x:Name="PauseCollapsed" Click="PauseButton_Click" Style="{StaticResource PauseAppBarButtonStyle}" Tag="Pause"/>
                <Button x:Name="PlayCollapsed" Click="PlayButton_Click" Style="{StaticResource PlayAppBarButtonStyle}" Tag="Play"/>
                <Button x:Name="StopCollapsed" Click="StopButton_Click" Style="{StaticResource StopAppBarButtonStyle}" Tag="Stop"/>
            </StackPanel>
        </Grid>
    </AppBar>
</Page.BottomAppBar>

В файле кода .CS вы можете управлять объектом mediaelement.

        private void PauseButton_Click(object sender, RoutedEventArgs e)
    {
        myMediaElement.Pause();
    }

    private void StopButton_Click(object sender, RoutedEventArgs e)
    {
        myMediaElement.Stop();
    }

    private void ForwardButton_Click(object sender, RoutedEventArgs e)
    {
        myMediaElement.DefaultPlaybackRate = 0.0;
        myMediaElement.PlaybackRate = 2.0;
    }

    private void RewindButton_Click(object sender, RoutedEventArgs e)
    {
        myMediaElement.DefaultPlaybackRate = 0.0;
        myMediaElement.PlaybackRate = -1.0;
    }
person Kishore    schedule 12.11.2012

Вам нужно использовать MediaElement.

person Filip Skakun    schedule 12.11.2012
comment
Не знаю почему, но краткость вашего ответа меня позабавила. +1! - person jamie-wilson; 13.11.2012
comment
Что ж, ответ правильный и достаточный для части «Любая помощь или предложение полезна». У меня нет времени писать полный учебник, который я почти уверен, что уже сделал ранее для аналогичного вопроса, но на основе ограниченного исследования, показанного SFO - этого может быть достаточно, чтобы указать им правильное направление. - person Filip Skakun; 13.11.2012