Итак, будущее наступило и теперь, мы можем создавать вещи, о которых ранее даже не помышляли

В этой статье я хочу рассказать о том, как можно своими руками построить музыкальный плеер, получающий аудио-стрим с одного из стриминговых музыкальных сервисов. На сегодняшний день их существует уже огромное количество. Это и всемирно известный сервис Spotify и Apple.Music и много других. Но сегодня речь пойдём об одном из новых сервисов, вещающих музыку в объёмном формате а именно - Atlas.Music. Мне известно, что сервис вещает музыку и подкасты в DolbyDigital Surround формате по протоколу Unicast. Это означает, что имея многоканальную аудио-систему у вас дома или в клубе, вы можете слушать настоящее пространственное звучание. Весь контент на сервисе имеет шестидорожечную запись и нам остаётся лишь принять и декодировать её на стороне клиента. Сервис является бесплатным и не накладывает ограничения на качество звучания (сейчас оно составляет 380 кбит). Более того, сервис предлагает всем желающим музыкантам размещать свою музыку в каталоге, причём совершенно бесплатно. На сегодня сервис уже предоставляет два типа приложения для прослушивания музыки, которые можно скачать с официального сайта компании:

  1. Приложение для смартфонов. Здесь музыка транслируется в формате стерео + 3Д. Это псевдо-сурраунд трансляция, которая расширяет стереобазу по частотным характеристикам придавая звучанию виртуальный эффект объёмного звука.

  2. Приложение для домашних медиа-центров, автомобилей, медиа-приставок. Здесь, при наличии мультиканальной аудио аппаратуры можно слушать полноценное объёмное звучание как если вы находитесь в кинотеатре или на живом концерте.

Недавно, вышеуказанная компания выпустила специальную компоненту для своего сервиса, с помощью которой можно оснащять свои приложения музыкальным наполнением. Скачать компоненту можно с ГитХаб по ссылке.

На данный момент компонента доступна для операционной системы Win10. Стоит напомнить, что сервис транслирует музыку и подкасты по протоколу Unicast, это позволяет выбирать музыку которую вы хотите послушать из заранее подготовленных плейлистов или по запросу артиста или трека.

Итак, для постройки своего плеера нам достаточно скачать DLL файл внешней компоненты (ActiveX COM объект) и присоединить его к своему проекту на C# или другом языке програмирования, поддерживающем платформу .Net Framework 4.8 или выше. В скачанном по ссылке выше каталоге, можно найти демо-пример с открытым исходным кодом, иллюстрирующим использование данной компоненты. Весь API содержит несколько типов данных и функций, обеспечивающий получение музыкального контента.

К первому типу данных относится структура: PlayList он нужен для чтения списка плейлистов хранящихся на сервисе. Эта структура содержит две строковые переменные: ListID и ListName. Они отвечают за доступ к уникальному идентификатору плейлиста и его названию.

Второй тип, вернее структура это ListMusicData используется для определения характеристик целого трека. Ниже описан перечень его членов.

  • ID - идентификатор трека (тип строка)

  • ArtistName - Название артиста которому принадлежит трек (тип строка)

  • Image - картинка артиста (тип Image)

  • TrackName - название трека (тип строка)

  • TrackGenre - жанр музыкальной композиции (тип строка)

  • TrackDuration - длительность композиции (тип строка)

Инициализация компоненты (подключение к серверу)

Для подключения к серверу достаточно прописать строку инициализации с указанием вашего токена (на данный момент токен не используется)...

import Atlas_API;
//INITIALIZING CONNECTION TO THE SERVER
        if (TCPC.ConnectToServer("TOKEN")) 
          {
            //инициализация прошла успешно
          }
        else
          {
            //сервер отверг подключение
          }

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

//GET PLAYLISTS
    List<Atlas_Music_API.PlayList> pl = TCPC.GetPlayLists();

    foreach (Atlas_Music_API.PlayList item in pl)
    {
        ListViewItem lItem = ListView1.Items.Add(item.ListID);
        lItem.SubItems.Add(item.ListName);
    }

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

//GET TRACKS BY PLAYLIST UUID
{
    List<Atlas_Music_API.ListMusicData> playList = TCPC.GetTracksByPlayListID("UUID");

    foreach (Atlas_Music_API.ListMusicData item in playList)
      {
          ListViewItem lItem = ListView1.Items.Add(item.ID);
          lItem.SubItems.Add(item.TrackName);
          lItem.SubItems.Add(item.ArtistName);
          lItem.SubItems.Add(item.TrackGenre);
          lItem.SubItems.Add(item.TrackDuration);
      }
}

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

внешний вид демо-приложения использующего компоненту Atlas.API
внешний вид демо-приложения использующего компоненту Atlas.API

И музыка звучит

Сделаем небольшую передышку и рассмотрим более подробно протокол Unicast. В отличие от привычного Broadcast где трансляция выполняется для всех слушателей одновременно, в случае unicast мы получаем данные индивидуально, как бы по запросу. Когда мы инициировали наше подключение, удалённый сервер зарегистрировал наш ID и создал для нас медиа-канал, по которому мы и будем взаимодействовать. Простыми словами мы создали сокетное соединение, и параллельно ему, мы также связаны с сервисом ещё и протоколом HTTP, по которому будем получать стрим. Для этого нам достаточно указать нашей компоненте, какой именно трек мы хотим проиграть. Здесь нам на выручку приходит также уникальный идентификатор трека, запишем ниже...

//PLAY THE SONG
{
    TCPC.PlaySong("track_UUID");
}

Ну вот казалось бы и всё. Мы указали идентификатор трека, компонента отправила его на сервер и мы счастливы от того, что музыка звучит в высоком качестве и в полном объёме, если конечно вы используете многоканальную аудио-систему.

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

{
    List<Atlas_Music_API.ListMusicData> playList = TCPC.GetMusicInfo("track_UUID");
    //здесь получаем результат поиска и заполняем список треков
}

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

В завершении

Сервис Atlas.Music достаточно молодой и постоянно развивается. Возможно в скором будущем мы получим более ёмкую систему автоматизации прослушивания музыки. Но даже сейчас, сервис содержит алгоритмы искусственного интеллекта, которые позволяют с высокой точностью определять жанровую составляющую музыку, строить динамические плейлисты содержащие схожую музыку и другие интересные вещи.

Надеюсь вам понравилась эта статья и было интересно её читать. Мне лишь остаётся пожелать вам успехов и всего наилучшего. Всем мира!

Комментарии (4)


  1. Cregennan
    18.03.2024 13:14
    +4

    from DolbyDigitalHandmadeDIYPlayer import Player
    Player.play()


    1. RoyalBeat Автор
      18.03.2024 13:14

      ваш пример не имеет никакого отношения к вышеописанному сервису


  1. dabrahabra
    18.03.2024 13:14
    +1

    А при чем тут AWS?