идея  |   железо  |   софт  |   email  |   форум |   



Пишем софт - итерация 1

Я и Microsoft

Судьба проекта Freestyle, который, похоже, будет иметь название Windows XP Media Center Edition - XP MCE становится все более ясной. MS не хочет замыкаться на один тип платформ, но в то же самое время, не хочет сразу бросать его на растерзание самоделкиным вроде меня. Стратегия вырисовывается такая: сначала XP MCE будет поставляться предустановленым в устройствах, которые будут продаваться в массовых количествах и иметь совместимое железо (HP делает первый вариант, который будет стоить порядка $1500). Позже можно будет ожидать поставку XP MCE в составе TV tuner карточек, или другого совместимого железа, обладающего пультами ДУ. Далее, может быть XP MCE обрастет достаточным количеством драйверов, чтобы попасть в свободный доступ. Возможно, в MSDN будет какой-нибудь SDK еще раньше.

[Image]

Такой расклад не меняет моих планов написать свой софт, поскольку он проще и менее амбициозен. Да и нужен уже сейчас. А если XP MCE будет такой, какой ее хотелось бы видеть, то я легко откажусь от своего софта.

Постановка задачи

Общая задача выглядит так:

Создать программу, позволяющую проигрывать музыкальные файлы (MP3, WMA), просматривать видеодиски в формате MPEG4, VideoCD (и, возможно, DVD), просматривать фотографии. UI должен быть таким, чтобы им можно было пользоваться при использовании PAL телевизора в качестве устройства вывода и находясь в 3-х метрах от телевизора. Основным устройством управления будет пульт ДУ - то есть, можно ожидать, что обьем возможных команд будет достаточно ограниченным - клавиши навигации, ENTER, стандартные кнопки плеера и цифровые клавиши.

Поскольку все сразу разработать не получится, будем работать итерациями. Я воспользуюсь принципами экстремального программирования (XP) - разобью задачи на User Story, упорядочу из по важности для Заказчика (для меня то есть) и буду реализовывать одну за другой, стараясь иметь работающую систему в любой момент.

Итак - истории в порядке убывания важности:

  • Проигрывание MP3 и WMA файлов. Просмотр по артистам, затем по альбомам, затем просмотр и проигрывание альбома.
  • Просмотр обложек дисков в режиме списка альбомов и просмотра альбома.
  • Просмотр фотографий в папке в режиме слайд-шоу. Навигация по папкам.
  • Просмотр видео файлов с HDD
  • Просмотр видео файлов с CD
  • Поддержка команд управления проигрыванием (Play, Stop, Pause, FF, Rew и т.п.)
  • Конфигуратор для мапирования команд на клавиши (или в будущем, другие события)

На чем писать

У меня был реальный выбор - Visual Studio .NET (C#) или Delphi. Немного попробовав и то и другое, остановился все-таки на Delphi. Для нее побольше всего наработано уже, хотя на C# писать поприятнее.

Пишем проигрыватель музыки.

Чем играть музыку? Реальных вариантов два - Windows Media Player и WinAmp. С точки зрения программирования, WMP вне конкуренции - у него есть нормальные COM интерфейсы. Кроме того, он сразу же может и видео играть.

Как реализовывать музыкальный каталог? Чем проще, тем лучше. Видны два варианта - использовать встроенный в WMP и написать свой. Поскольку впереди маячит перспектива перехода на решение MS, уж лучше сразу иметь стандартное хранилище - Media Library от WMP.

Начинаем разбираться. Media Library поддерживается только в интерфейсе 7.1. Пробую поработать с ним из Delphi - нет эффекта. Что-то не так... И что вы думаете? В MSDN черным по-белому написано:

Note that Windows Media Player 7 does not support embedding the control in any applications that use Microsoft Visual Basic or Visual C++ through IDispatch.

Ну ладно, не нужен мне ваш IDispatch - я и IDL могу заимпортить - какие проблемы? Пробуем... Не работает. Никакой ошибки не выдается, но ничего и не происходит. То есть OCX 6.4 играет музыку, а 7.1 - не играет. Ни через IDispatch, ни через статически связанные вызовы.

Итак, полезли снова мудрость искать. Ньюсы Borland завалены вопросами аналогичными моему и ни одного ответа отличного от "попробуйте версию 6.4". По C# ответы такие же. Вообще - как вам такой диалог: "Я покрасил вашей краской стены, и вся краска слезла", и в ответ - "попробуйте оклеить стены обоями". Так и тут - "у меня 7.1 player не работает", ответ: "используйте 6.4". И это инженер поддержки отвечает!

Любопытен тот факт, что если вставить контрол 7.1 на Web страничку, то все работает здорово. Надо будет порыться в недрах - как же это IE обращается с контролом? Может какие волшебные заклинания сначала производит?

Ладно, пока я забью на 7.1 и поработаю через 6.4. Благо что музыку он играет, а информацию о файлах (типа ID3) можно и другими способами получить.

Итак, каталог музыки надо реализовывать своими средствами. Так как в User Story написано, что Заказчик хочет каталог артистов, в нем список альбомов, а там - список песен, то мы можем обойтись простой файловой системой, благо многие MP3 грабберы, да и сам WMP при копировании дисков создают именно такую структуру папок - артист / альбом / песни.

Я написал несложную систему классов - TMusicLibrary, TArtist, TAlbum. Для интерфейса я написал простейшие контролы - TTVButton. Брошенные на форму они могут иметь только один из них выделенным. Выделение меняется клавишами навигации. В принципе и все. Окно делаем со стилем Topmost, без рамки и размером на весь экран. Я добавил фоновую картинку, чтобы было красивее (как в XP MCE).

Далее стоит задача работы с картинками обложки. WMP когда срезает альбом, делает так, что (по крайней мере в WinXP) папка в режиме Thumbnails украшена обложкой альбома. Выяснилось, что сделать это просто - достаточно положить файл с именем folder.jpg в папку. Не будем изобретать велосипед, и воспользуемся этим способом.

Еще немного кодирования и получаем вот что:

[Image]
Главное меню
 
[Image]
Список альбомов
 
[Image]
Альбом

Я пока зашил фиксированное разрешение 800x600 - его поддерживают практически все TV-out карты. С форматом 16:9 будем возиться позже. Таким образом, на настоящий момент я имею игралку музыки, которая выглядит вот так:

[Image]

Слева вы видите сам музыкальный компьютер (надо ему имя придумать, что ли). Вот он же увеличенный:

[Image]

Видна беспроводная карточка Linksys и ИК приемник, включенный между отсутствующей клавиатурой и клавиатурным разьемом.

Результат первой итерации лежит здесь.

 

 

 


Hosted by uCoz