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

Информатор avatar | 25
FavoriteLoading В закладки
SayPlay. История о музыкальном плеере с голосовым управлением

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

Идея

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

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

Разработка

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

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

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

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

Для работы с медиатекой (с музыкой, хранящейся на телефоне) я первоначально использовал класс 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. Мне нравится

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

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

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

setting

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

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

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

mediaPicker

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

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

playlist

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

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

night

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

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

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

draft

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

solidworks

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

iconBlack

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

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

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

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

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

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

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

Трудности

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

Промокоды

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

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]

Абидуллин Ринат

1 Звезд2 Звезды3 Звезды4 Звезды5 Звезд (1 голосов, общий рейтинг: 5.00 из 5)
undefined
iPhones.ru
Добрый день. Я разработчик программы SayPlay. Для начала представлюсь: меня зовут Ринат, я из Екатеринбурга, мне 26 лет. Хочу поведать вам историю о том, как пришла идея данного приложения и что из этого вышло. Идея Я люблю слушать музыку в наушниках, когда занимаюсь какими-либо делами, будь то мытье посуды, катание на велосипеде или даже просто...
Прокомментировать

🙈 Комментарии 25

  1. Artemitto avatar
    Artemitto7 мая 2015
    2

    Только что скачал по промокоду, первые впечатления – супер! Не хватало такого приложения :)
    Если бы, в дальнейшем, сделали такое приложение для Apple Watch, чтобы можно было всю музыку так в доме переключать – было бы вообще шикарно :)

    RinatAB avatar
    RinatAB7 мая 2015
    1

    @Artemitto, Поддержка Apple Watch обязательно будет.

  2. vetok avatar
    vetok7 мая 2015
    1

    спасибо
    забрал http://tokn.co/yeagdbcu

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

  3. PaxweL avatar
    PaxweL7 мая 2015
    0

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

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

    RinatAB avatar
    RinatAB7 мая 2015
    1

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

    PaxweL avatar
    PaxweL7 мая 2015
    0

    @RinatAB, почему-то так и подумал) для воспроизведения, например, достаточно произнести “Начать”.

  4. Alex avatar
    Alex7 мая 2015
    0

    Насчет промо, сказка какая-то. Статья только появилась (пишу позже), уже разобрано. Как то быстро. ))

  5. Alex avatar
    Alex7 мая 2015
    0

    Интересно, батарею быстро будет разряжать?

    RinatAB avatar
    RinatAB7 мая 2015
    0

    @Alex, нагружает телефон практически как обычный плеер – батарея держится долго

  6. rdc avatar
    rdc7 мая 2015
    0

    Зкщпкуыышму Ршгыу!

    а команды в идеале надо делать обучаемыми
    тогда можно и под себя настроить, и работать будет хоть в Китае

  7. floMaster avatar
    floMaster7 мая 2015
    1

    Автор молодец) быстро собрал)

  8. CurlyBoy avatar
    CurlyBoy7 мая 2015
    0

    Ситуация: слушаю музыку через джек провод в машине, на нем нет микрофона. Услышит ли приложение команду?

    RinatAB avatar
    RinatAB7 мая 2015
    0

    @CurlyBoy, Да, в этом случае команды принимает микрофон на iPhone. Только учтите, что команды должны звучать громче музыки )

  9. adamob avatar
    adamob7 мая 2015
    0

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

    RinatAB avatar
    RinatAB7 мая 2015
    5

    @adamob, У меня возникала мысль сделать приложение бесплатным с ознакомительным запасов, скажем, в 100 голосовых команд и с одной покупкой внутри приложения для разблокировки голосовых команд

    JohnDinglu avatar
    JohnDinglu8 мая 2015
    1

    @RinatAB, отличная работа, земляк! :) Приятно видеть, что в родном Екатеринбурге есть такие таланты. Жаль, что промо-коды разобрали, но думаю, что не проблема поблагодарить копеечкой.

    В самой статье хотел увидеть ещё момент опыта самого автора в разработке: что знал и на каком уровне, работал ли раньше с приложениями под iOS и подобной графикой. Очень быстрый темп разработки, поэтому вангую, что опыт был, но очень уж интересно услышать факты.) Статья не только познавательна, но и вдохновляющая, спасибо!

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

    RinatAB avatar
    RinatAB8 мая 2015
    0

    @JohnDinglu, По опыту разработки: начал изучение языка Objective-C примерно в 2013 году – читал книги, статьи, смотрел видеоуроки, компилировал примеры и старался выполнять задания из книг. В августе 2014 года решил, что пора бы начать создавать собственное приложение. Первое приложение писал 8 месяцев – это была программа для запоминания английских слов. SayPlay – второе приложение, при его создании я опирался на опыт, полученный от первого приложения.

    Из хороших видеоуроков могу посоветовать эти: http://vk.com/iosdevcourse
    Посмотрев их и выполнив предлагаемые задания, у вас будет более чем достаточный багаж знаний для создания собственных приложений )

  10. RinatAB avatar
    RinatAB8 мая 2015
    0

    По опыту разработки: начал изучение языка Objective-C примерно в 2013 году – читал книги, статьи, смотрел видеоуроки, компилировал примеры и старался выполнять задания из книг. В августе 2014 года решил, что пора бы начать создавать собственное приложение. Первое приложение писал 8 месяцев – это была программа для запоминания английских слов. SayPlay – второе приложение, при его создании я опирался на опыт, полученный от первого приложения.

    Из хороших видеоуроков могу посоветовать эти: http://vk.com/iosdevcourse
    Посмотрев их и выполнив предлагаемые задания, у вас будет более чем достаточный багаж знаний для создания собственных приложений )

    Yerkin Bazarov avatar
    Yerkin Bazarov21 мая 2015
    0

    @RinatAB, планируете ли выпускать андроид версию приложения? на моем Samsung Note 4 очень не хватает подобного приложения

  11. ZeR0Co_0l.. avatar
    ZeR0Co_0l..8 мая 2015
    0

    Щикарно)) скачаю чуть позже, скажи те, а ландшафтный режим у нее есть? Я бы в машине пользовался, было бы прекрасно, сейчас пользуюсь CarTunes но там просто свайпы, но дизайн очень классный (для меня это по не понятным причинам важный критерий)

  12. ZeR0Co_0l.. avatar
    ZeR0Co_0l..8 мая 2015
    0

    Щикарно)) скачаю чуть позже, скажите, а ландшафтный режим у нее есть? Я бы в машине пользовался, было бы прекрасно, сейчас пользуюсь CarTunes но там просто свайпы, но дизайн очень классный (для меня это, по не понятным причинам, важный критерий)

    RinatAB avatar
    RinatAB9 мая 2015
    0

    @ZeR0Co_0l.., ландшафтного режима нет )

    ZeR0Co_0l.. avatar
    ZeR0Co_0l..9 мая 2015
    1

    @RinatAB, что ж, тогда думаю вам стоит этим заняться если есть время). Ландшафтный режим будет хорошим дополнением. Надеюсь все получится так как вы хотели)

  13. Yerkin Bazarov avatar
    Yerkin Bazarov21 мая 2015
    0

    @RinatAB, планируете ли выпускать андроид версию приложения? на моем Samsung Note 4 очень не хватает подобного приложения

  14. Rafff avatar
    Rafff20 июля 2016
    0

    Добрый день!А для андройда есть такое приложение?

Вы должны авторизоваться или зарегистрироваться для комментирования.

Нашли орфографическую ошибку в новости?

Выделите ее мышью и нажмите Ctrl+Enter.

Как установить аватар в комментариях?

Ответ вот здесь