Dev Story SayPlay. История о музыкальном плеере с голосовым управлением

Добрый день. Я разработчик программы SayPlay. Для начала представлюсь: меня зовут Ринат, я из Екатеринбурга, мне 26 лет. Хочу поведать вам историю о том, как пришла идея данного приложения и что из этого вышло.

Идея

Я люблю слушать музыку в наушниках, когда занимаюсь какими-либо делами, будь то мытье посуды, катание на велосипеде или даже просто прогулка. Часто возникает желание не очень любимую композицию пропустить или перемотать вперед (особенно касается электронных треков со вступлениями по 1,5 минуты). Конечно, в этих случаях телефон доставать не обязательно, можно переключить композицию через кнопки управления на наушниках (если они конечно есть). Но что если у вас руки мокрые (к примеру, моете посуду), или вы прогуливаетесь в мороз и руки спрятаны в варежки, ну или просто сидите в подвале со связанными руками :). Вот тут голосовое управление воспроизведением как нельзя кстати.

Данная история опубликована в рамках рубрики Developer Story, где разработчики делятся секретами своей внутренней кухни.
Это бесплатно. Прочитайте правила.

Разработка

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

Над приложением я начал работать 1 апреля. Весь базовый функционал, а именно проигрывание музыки и распознавание голосовых команд, был написан за один вечер. На следующий день был реализован режим работы приложения в бэкграунде, т.е. была обеспечена работа приложения на заблокированном телефоне. Для меня это было важно, т.к. вряд ли кому-нибудь понравилось бы то, что для работы приложения экран телефона должен быть непогашенным, что изрядно бы садило батарею. К слову, в App Store есть программа tipSkip, в которой управление воспроизведением музыкой реализовано постукиваниями по телефону, и, чтобы это работало, телефон нельзя блокировать.

С 3 по 6 апреля внимание было уделено внешнему оформлению приложения, был добавлен ночной режим, добавлены настройки. Параллельно думал над идеей для иконки. О том, как создавалась иконка вы можете прочитать в соответствующем разделе этой статьи.

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

Читайте также  Стала известна цена новой Apple TV

Для работы с медиатекой (с музыкой, хранящейся на телефоне) я первоначально использовал класс MPMediaPickerController. Им легко пользоваться: пара строк кода, и в вашем приложении появляется возможность выбора композиций из вашей медиатеки. Но меня он совершенно не устраивал по следующим причинам: выбор не сохранялся между запусками приложения, нельзя отменить выбор случайно выбранных композиций, нельзя выбрать сразу весь альбом, исполнителя или жанр. 8 – 14 апреля велась работа над созданием собственного mediaPiker, о котором вы можете подробнее прочитать в разделе этой статьи об отличительных возможностях приложения.

15 апреля была встроена аналитика – Google Analytics и Crashlytics.

И, наконец, 23 апреля я отправил приложение на review Apple. В магазине App Store приложение появилось 5 мая.

Отличительные особенности приложения

Самая важная отличительная особенность приложения – это распознавание голосовых команд на русском языке. Голосовые команды распознаются прямо на телефоне, подключение к интернет не требуется. На данный момент работают следующие команды (замечания и предложения более уместных на ваш взгляд команд крайне приветствуются):

  1. Начать играть
  2. Поставить на паузу
  3. Следующая композиция
  4. Предыдущая композиция
  5. Увеличить громкость
  6. Уменьшить громкость
  7. Перемотать вперёд
  8. Отмотать назад
  9. Случайный порядок
  10. Воспроизводить по порядку
  11. Повторять музыку
  12. Отключить повторение
  13. Играть всю музыку
  14. Мне нравится

Вы можете посмотреть, как работают голосовые команды в следующем коротком видеоролике:

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

Я понимаю, что распознавание голосовых команд неидеально и иногда возможны ложные срабатывания. По этой причине в настройках была добавлена возможность выборочного отключения/включения отдельных голосовых команд. Скажем, если вы не хотите, чтобы управление громкостью осуществлялось голосовыми командами, вы можете отключить конкретно только их. Вы также можете настроить шаг перемотки композиции (в секундах) и шаг изменения громкости (в процентах).

Вторая важнейшая особенность плеера – возможность его работы в бэкграунде: он продолжает играть музыку и распознавать голосовые команды на заблокированном телефоне.

Я отказался от использования стандартного MPMediaPickerController для выбора композиций. Вместо него был написан собственный, на мой взгляд более удобный, который позволяет:

  • Выбирать сразу всю коллекцию (плейлист, альбом и т.д.), в том числе с возможностью предварительного перемешивания изначального порядка
  • Снимать выделение сразу со всей коллекции
  • Добавлять (отменять выбор) композиции по отдельности
  • Очищать текущий список воспроизведения
  • Сохранять состояние выбора композиций между запусками приложения
Читайте также  Концепт работы iWatch с картами на iPhone

Добавленные композиции составят ваш список для воспроизведения. Этот список (в приложении он называется “Плейлист”) обладает следующими возможностями:

  • Воспроизводимая композиция выделяется оранжевым цветом фона
  • Автоматически прокручивает таблицу до текущей воспроизводимой композиции
  • Позволяет удалять композиции из списка для воспроизведения (жест “свайп влево”)
  • Может зациклить воспроизведение плейлиста (repeat)
  • Перемешивает последовательность композиций в плейлисте с возможностью вернуться к первоначальной последовательности

Плеер может работать в двух режимах: с микшированием звука с остальными источниками и без микширования (обычный режим). При включенном микшировании вы можете играть в какую-нибудь игру со звуком и слушать музыку в плеере. Режим переключается в настройках.

К второстепенным особенностям приложения можно отнести автоматический переход между ночным и дневным режимами в зависимости от времени суток.

Как создавалась иконка

Я никогда не работал с векторными редакторами графики, но зато хорошо разбираюсь в программе SolidWorks (по профессии я инженер). В ней и решил нарисовать иконку.

Сначала думал над идеей для иконки – рисовал наброски карандашом на листочке:

Последняя идея мне понравилась сразу и я перешел к воплощению задумки в SolidWorks:

Далее созданную деталь я перевел в чертеж, залил контур черным цветом и экспортировал как картинку:

Ну а с готовой растровой картинкой уже достаточно легко работать в Photoshop, что я и сделал, “поиграв” с размером иконки и цветом фона.

Дальнейшее развитие

В первой версии приложения не удалось реализовать весь задуманный функционал в полной мере. В последующих обновлениях я сосредоточусь на добавлении следующих возможностей:

  • Эквалайзер
  • Распознавание голосовых команд на английском языке
  • Скробблинг композиций на lastfm

Продвижение и затраты

Кроме 99$ за аккаунт разработчика, на создание приложения я ничего не потратил: программировал, рисовал графику самостоятельно. Иногда слышу такой вопрос “А сколько ты времени затратил на написание приложения? Если это время перевести в деньги – то разве это не будет затратой?” Нет, не будет. Это мое свободное время, которое я мог бы “убить” совершенно пустыми занятиями, вроде просмотров сериалов, фильмов и т.д.

Приложение вышло в App Store совсем недавно, продвижения пока не было совершенно никакого. Эта статья – первая.

Трудности

Проблема №1 для меня на данный момент – это скробблинг песен в Last.fm, но не с технической точки зрения, а с юридической: использовать их API можно только для некоммерческих приложений, т.е. ваше приложение не должно извлекать какую-либо прибыль (за счет продаж, встроенной рекламы и т.д.) Мое приложение – коммерческое, и для использования API Last.fm необходимо написать письмо в их службу поддержки с просьбой расширить лицензию для использования в коммерческом приложении. Такое письмо было написано, но ответа от них пока не поступило.

Читайте также  Apple начала судиться с правительством США по вопросу полномочий спецслужб, Россия фигурирует тоже

Промокоды

Заметил, что в комментариях часто пишут: “Зачем нужны промокоды?” Итак, промокоды позволяют установить приложение бесплатно (если приложение платное). Для создания промокодов я использую приложение Tokens – оно упрощает генерацию, распространение и отслеживание промокодов:

Промокоды:

http://tokn.co/nm8mf9ec
http://tokn.co/0asxyqhx
http://tokn.co/k7k48kuw
http://tokn.co/qbjsmxw2
http://tokn.co/497jzyr9
http://tokn.co/35yn29bv
http://tokn.co/dtghhqxp
http://tokn.co/srrdkkgk
http://tokn.co/a365xxsj
http://tokn.co/wkt9gyc7
http://tokn.co/6u3bg4gs
http://tokn.co/9vn7vqsb
http://tokn.co/yeagdbcu
http://tokn.co/cch67fyz
http://tokn.co/pq6f4y83
http://tokn.co/rnde64tn
http://tokn.co/ejfvuq7a
http://tokn.co/zp5uwk4h
http://tokn.co/t4e3af66
http://tokn.co/8x4rpyjt
http://tokn.co/fxmtp44g
http://tokn.co/bmdxch6r
http://tokn.co/hax4ybjq
http://tokn.co/23wp9fem
http://tokn.co/7k2jm3hd
http://tokn.co/d89nz4kf
http://tokn.co/swvqeqw5
http://tokn.co/gdpdhbre
http://tokn.co/5huwbfb4
http://tokn.co/uyz9x3x8

iPhone: 59 руб. [Скачать в App Store]

Источник: iphones.ru

Dream Clean