Блогът на Иван Андреев

Разработване на игри с помощта на XNA, MonoGame и Unity3D Blog

Използване на кода

Създаване на проект

Първо трябва да създадете нов проект.

media

Плейърът трябва да бъде поставен във всеки прозорец на източника в Visual Stidio, така че трябва да изберете проект на Editor Margin от менюто Extensibility. Кръстих проекта „InternetRadioPlayer“. Веднага след създаването на проекта в Solution Explorer можете да видите няколко файла, генерирани от Visual Studio.

Файловете от най-голям интерес за нас са InternetRadioPlayer.cs и InternetRadioPlayerFactory.cs. InternetRadioPlayerFactory.cs е фабрика, която създава нашия контрол за всяка страница с код в Visual Studio. Файлът съдържа следния код:

#region InternetRadioPlayer Factory

/// Експортиране на, което връща екземпляр на полето за редактора

[Order (After = PredefinedMarginNames.HorizontalScrollBar)] // Уверете се, че полето се намира под хоризонталната лента за превъртане

[MarginContainer (PredefinedMarginNames.Bottom)] // Задайте контейнера в долната част на прозореца на редактора

[ContentType („text“)] // Показване на това поле за всички текстови типове

вътрешен запечатан клас MarginFactory: IWpfTextViewMarginProvider

публичен IWpfTextViewMargin CreateMargin (IWpfTextViewHost textViewHost, IWpfTextViewMargin containerMargin)

върнете нов InternetRadioPlayer (textViewHost.TextView);

Няма да променя този файл, но ще поставя целия полезен код в InternetRadioPlayer.cs. Но първо трябва да създадем клас за играча (плейъра) и контрол за плейъра, който след това ще бъде поставен на страниците с кода.

Клас на играч

Класът на плейъра ще отговаря за възпроизвеждането на музика (можете да познаете по името). Той все още няма нищо общо с контролите.

Отначало се опитах да намеря добра библиотека за работа със звук, но не можах да намеря нищо просто и леко. В крайна сметка реших да използвам най-простото решение - използвам стандартния WPF контрол - MediaElement. Може да играе почти всичко (поне това, което Window Media Player може да играе, доколкото разбирам).

Време е да създадете класа на плейъра във файла Player.cs

публичен клас Player

частен MediaElement _player;

публичен PlayerState State < get; set; >

частен речник _playlist = нов речник ();

частен статичен плейър _instance;

публично събитие EventHandler променено;

публичен речник Плейлист

публичен двоен том

публичен статичен екземпляр на Player

if (_instance == null)

_instance = нов играч ();

публичен int SelectedIndex < get; set; >

_player = нов MediaElement ();

public void SetSource (int index, string uri)

_player.Source = нов Uri (uri);

публична невалидна игра ()

публична невалидност Стоп ()

публична невалидна пауза ()

public void Unload ()

if (State! = PlayerState.Stopped)

публична невалидна LoadPlaylist (string fileName)

низ [] редове = File.ReadAllLines (име на файл);

foreach (вариращ елемент в редове)

низ [] str = Regex.Split (елемент, ">>>");

частна невалидна OnChanged ()

if (Променено! = null)

публично изброяване PlayerState

Тук няма нищо твърде сложно. Плейърът има четири състояния: Неизвестно (плейлистът не се зарежда), Спряно (възпроизвеждането е спряно), Пауза (пауза) и Възпроизвеждане (възпроизвежда се музика).

Има методи, които променят това състояние и вътрешното състояние на плейъра (MediaElement).

LoadPlayList зарежда плейлиста от избрания файл.

Променено събитие информира абонатите да актуализират външния вид на играча.

По-рано писах, че един от проблемите е, че трябва да направите плейъра общ за всяка от страниците с кода. В този случай използвах статичната променлива _instance, за да попреча на никого да създава допълнителни играчи.

InternetRadioPlayerFactory създава екземпляр на контрола на плейъра (който ще бъде описан малко по-късно) за всяка страница с код. Съответно, ако създам плейър във всеки от контролите, би било възможно да възпроизвеждам няколко песни от различни страници наведнъж, което не е много добре.

Control - Player

Сега да преминем към създаването на контрола - това ще видим на страниците с кода в Visual Studio.

Щракнете върху Add-> New Item и изберете User Control (WPF) от раздела WPF. Назовах новата контрола PlayerControl.