{31 день с Mango} День 28: мультимедиа библиотека

Это День 28 в серии статей 31 день с Mango (перевод оригинальной серии 31 Days of Mango), и был написан приглашенным автором Jeff Fansler. Вы можете найти Jeff в твиттере @fanzoo.

Сегодня мы будем работать с классом MediaLibrary, который является частью пространства имен Microsoft.Xna.Framework.Media.  Как следует из названия, этот класс дает нам доступ к пользовательской мультимедиа библиотеке. Мультимедиа библиотека в Windows Phone хранит изображения и музыку. С помощью мультимедиа библиотеки вы можете интегрировать это содержимое в собственные приложения. Есть несколько причин, чтобы разработчик захотел сделать это. Вот несколько идей:
— Чтобы показать пользователю список музыкальных композиций, и дать ему возможность выбрать фоновую музыку во время работы с вашим приложением.
— чтобы разрешить пользователям загружать свои изображения из онлайн службы (например, Flickr) и добавлять их в мультимедиа библиотеку.
— чтобы использовать данные о композиторе или жанре из мультимедиа библиотеки, чтобы давать пользователю предложения по другому подобному контенту, который сможет его заинтересовать.

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

В примере приложения я добавил изображение image1.jpg в качестве ресурса. Это замечательное изображение и я уверен, что все пользователи захотят, как и мы, сохранить это изображение в мультимедиа библиотеку. Пример приложения сохраняет эту фотографию в  методе Application_Launching из файла App.xaml.cs. Вот код, который выполняет это:

var library = new MediaLibrary();    
var image = library.Pictures.Where(p => p.Name == imageName).SingleOrDefault();
if (image == null)    
{    
    var resource =    
        Application
        .GetResourceStream(new Uri(string.Format("/31DaysMediaLibrary;component/Images/{0}",    
                                    imageName),    
                            UriKind.Relative));    
    var bitmap = new BitmapImage();    
    bitmap.SetSource(resource.Stream); 
// Save the image to the camera roll or saved pictures album.
    library.SavePicture(imageName, bitmap.ToStream());    
}

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

var library = new MediaLibrary();

Эта строка создает новый экземпляр класса MediaLibrary. Это даст вам доступ к свойствам и методам мультимедиа библиотеки.

var image = library.Pictures.Where(p => p.Name == imageName).SingleOrDefault();

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

library.SavePicture(imageName, bitmap.ToStream());

 Эта строка сохраняет BitmapImage (битовое изображение) в библиотеку. Можно заметить, что BitmapImage не имеет метода ToStream. Я думаю, что она должна его иметь, поэтому я использовал метод расширения, чтобы добавить его. Расширенный класс не имеет ничего общего с мультимедиа библиотекой, но здесь я привожу код, чтобы вы знали, как это работает:

public static class BitmapExtensions
{    
    public static Stream ToStream(this BitmapImage bitmap)    
    {    
        var writeableBitmap = new WriteableBitmap(bitmap);    
        var stream = new MemoryStream();    
        writeableBitmap.SaveJpeg(stream, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100);    
        stream.Position = 0;    
        return stream;    
    }    
}

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

В примере приложения на экране отображается список музыкальных композиций, которые находятся в пользовательской мультимедиа библиотеке. Список находится в контроле ListBox. DataTemplate определяет связь свойств текста двух TextBlock. Один отображает название песни и другой композитора. Вот как выглядит код XAML для контрола ListBox:

<ListBox
    x:Name="lstSongs"
    SelectionChanged="SongSelectionChanged">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel
                Margin="0,0,0,17"
                Width="432"
                Height="78">
                <TextBlock
                    Text="{Binding Name}"
                    TextWrapping="Wrap"
                    Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                <TextBlock
                    Text="{Binding Artist.Name}"
                    TextWrapping="Wrap"
                    Margin="12,-6,12,0"
                    Style="{StaticResource PhoneTextSubtleStyle}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

 Установка ItemsSource в список песен довольно проста:

var library = new MediaLibrary();    
lstSongs.ItemsSource = library.Songs;

Есть несколько других свойств класса MediaLibrary, которые следует изучить:
Albums — Альбомы. Это аналогично коллекция списков музыкальных композиций, но вместо списков альбомов.
Artists — Композиторы. Также как и коллекция альбомов, это коллекция списков произведений композиторов.
Genres – Жанры. Это коллекция списков жанров произведений.
Playlists – Плейлисты. Это коллекция списков плейлистов, которые пользователь добавил в свою библиотеку.

Теперь вы знаете, что использовать мультимедиа библиотеку довольно легко. Большая часть кода в примере приложения написана для использования контента, а не для доступа к нему из библиотеки.  Я рассказал о том, как получить доступ к коллекциям музыкальных произведений и как сохранить изображение в библиотеку. Я обсудил несколько способов использования библиотеки в собственных приложениях. Я уверен, что есть много других способов использования этого контента. Получайте удовольствие, я уже жду ваши новые приложения!

Вы можете скачать рабочую версию проекта, описанного в этой статье: скачать.

Завтра в статье мы поговорим о глобализации/локализации, и показать вам, как легко включить это в ваш проект Windows Phone. До встречи!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *