{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "В наушниках по жизни: заметки с тегом KTeam Radio",
    "_rss_description": "Здесь я пишу свои идеи, мысли, описываю события своей жизни и просто делаю личные и рабочие заметки. «А Вы что, собираетесь жить вечно?»",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/alexbirukov.ru\/?go=tags\/kteam-radio\/",
    "feed_url": "https:\/\/alexbirukov.ru\/?go=tags%2Fkteam-radio%2Fjson%2F",
    "icon": "https:\/\/alexbirukov.ru\/pictures\/userpic\/userpic@2x.jpg?1683051473",
    "authors": [
        {
            "name": "Бирюков Александр",
            "url": "https:\/\/alexbirukov.ru\/",
            "avatar": "https:\/\/alexbirukov.ru\/pictures\/userpic\/userpic@2x.jpg?1683051473"
        }
    ],
    "items": [
        {
            "id": "316",
            "url": "https:\/\/alexbirukov.ru\/?go=all\/udio-pleer-na-delphi-dlya-android-code-gear-rad-studio-xe7\/",
            "title": "Аудио-плеер на Delphi для Android с применением библиотеки BASS.",
            "content_html": "<p>В середине прошлого года появилась необходимость написания простого приложения для мобильных платформ Android и iOS. Первым рабочим проектом стал <a href=\"http:\/\/alexbirukov.ru\/?go=tags\/kteam\/\">KTeam<\/a>. После его успешного запуска, появилась необходимость написания аудио-плеера, способного воспроизводить потоковое вещание интернет радиостанций.<\/p>\n<p>И так, сегодня я подробно опишу, как создать простой плеер потокового вещания.<\/p>\n<p>Для работы нам понадобятся среда программирования Code Gear RAD Studio XE7, работать я рекомендую именно в данной версии программы, т. к. в используемых библиотеках, имеются некоторые не стыковки в работе с предыдущими версиями.<\/p>\n<p>По причине того, что встроенных средств проигрывания интернет потока не имеется, мы воспользуемся замечательной библиотекой BASS, для написания приложения для Android (для iOS следует использовать другие компоненты).<\/p>\n<p>Для корректной работы библиотеки BASS я рекомендую так же установить компоненты <a href=\"http:\/\/sourceforge.net\/projects\/dpfdelphiandroid\/\">DPF Android Native Components<\/a>, я в своём примере буду использовать версию 2.8.6.<\/p>\n<h2>Начало<\/h2>\n<p>Ну я думаю процесс установки Code Gear RAD Studio XE7 описывать не стоит, поэтому сразу переходим к установке дополнительных компонентов и библиотек, потому что именно эта часть вызывает наибольшие проблемы, и именно поэтому данный этап я опишу наиболее подробно.<\/p>\n<h2>BASS<\/h2>\n<p>Идём на <a href=\"http:\/\/www.un4seen.com\">официальный сайт un4seen.com<\/a> библиотеки, нажимаем в левом меню на ссылку <a href=\"http:\/\/www.un4seen.com\/bass.html\">BASS<\/a> и скачиваем там последнюю версию для <a href=\"http:\/\/www.un4seen.com\/forum\/?topic=13225\">Android<\/a>. На момент написания данной статьи на сайте опубликована версия 2.4 от 13 марта 2015 года. <a href=\"http:\/\/www.un4seen.com\/stuff\/bass24-android.zip\">Прямая ссылка<\/a> на скачивание библиотеки с официального сайта. <a href=\"http:\/\/alexbirukov.ru\/files\/radio-andr\/bass24-android.zip\">Ссылка на скачивание с моего сайта<\/a>.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"1276\" data-ratio=\"1.3632478632479\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/-2015-03-24-09.25.46.png\" width=\"1276\" height=\"936\" alt=\"Сайт библиотеки BASS\" \/>\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/-2015-03-24-09.29.03.png\" width=\"1274\" height=\"959\" alt=\"Ссылки на скачивание библиотек\" \/>\n<\/div>\n<\/div>\n<p><i><b>Примечание:<\/b> я рекомендую использовать именно данную версию библиотеки, потому что предыдущие версии не работают с XE7, и при инициализации библиотеки появляется ошибка.<\/i><\/p>\n<h2>BASSFunctions<\/h2>\n<p>Для корректной работы с библиотекой, нам потребуется ещё один дополнительный файл, это <a href=\"http:\/\/alexbirukov.ru\/files\/radio-andr\/BASSFunctions.pas\">BASSFunctions.pas<\/a>. Данный файл опубликовал на форуме пользователь с ником 3delite.<a href=\"http:\/\/www.3delite.hu\/Object%20Pascal%20Developer%20Resources\/Download\/BASSFunctions.pas\">Ссылка<\/a> на оригинальный файл.<\/p>\n<h2>DPF Android Native Components<\/h2>\n<p>Для корректной работы библиотек BASS, часто требуется установка компонентов DPF Android Native Components, т. к. в их составе имеется компонент для работы с аудио, без которого компилятор будет просто выдавать ошибку.<\/p>\n<p>Идём на <a href=\"http:\/\/sourceforge.net\/projects\/dpfdelphiandroid\/\">официальный сайт<\/a> и скачиваем последнюю версию компонентов. Или вы можете скачать версию <a href=\"http:\/\/alexbirukov.ru\/files\/radio-andr\/DPF.Android.Native.Components.v2.8.6.zip\">2.8.6<\/a> с моего сайта.<\/p>\n<h2>Поехали<\/h2>\n<p>После того, как мы скачали все необходимые дополнительные файлы, приступаем к установке компонентов.<\/p>\n<p>Начнём с DPF Android Native Components. Я рекомендую (во избежании дополнительных проблем с подключением) распаковать файлы в папку DPF.Android.Native.Components.v2.8.6 в корень диска C.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-09-55-10.png\" width=\"1280\" height=\"1024\" alt=\"Распаковываем файлы\" \/>\n<\/div>\n<p>В каталоге с файлами, имеется файл Install.txt. У кого хорошо с английским, могут сделать всё по инструкции описанной в файле, для тех кто в школе учил немецкий, я опишу процесс установки компонентов подробно.<\/p>\n<p>Запускаем Codegear RAD Studio. Далее в верхнем меню открываем Tools->Options->Delphi Options->Library.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"1280\" data-ratio=\"1.25\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-09-58-33.png\" width=\"1280\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-00-13.png\" width=\"1280\" height=\"1024\" alt=\"\" \/>\n<\/div>\n<\/div>\n<p>В выпадающем списке справа выбираем платформу «32-bit Windows» и добавляем в раздел «Library path» путь к нашим компонентам.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-04-06.png\" width=\"1280\" height=\"1024\" alt=\"\" \/>\n<\/div>\n<p>Теперь то же самое проделываем для платформы «Android».<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-04-55.png\" width=\"1280\" height=\"1024\" alt=\"\" \/>\n<\/div>\n<p>Теперь нам потребуется скомпилировать и установить компоненты. Для этого нажимаем File -> Open Project. Открываем проект из папки компонентов, соответствующий вашей среде программирования.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"1280\" data-ratio=\"1.25\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-06-17.png\" width=\"1280\" height=\"1024\" alt=\"Открываем проект\" \/>\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-06-31.png\" width=\"1280\" height=\"1024\" alt=\"DPFAndroidPackagesXE7.dproj\" \/>\n<\/div>\n<\/div>\n<p>Далее нам надо скомпилировать проект и установить полученные компоненты.<\/p>\n<p>Нажимаем правой кнопкой на проекте в инспекторе проекта и выбираем пункт <b>«Build»<\/b>, начнётся построение проекта.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-13-23.png\" width=\"1280\" height=\"1024\" alt=\"Выполняем Build\" \/>\n<\/div>\n<p>После завершение построение, опять нажимаем правой кнопкой на проекте в инспекторе и выбираем пункт <b>«Install»<\/b>.<\/p>\n<p>Компоненты готовы к работе. Приступим к созданию проекта.<\/p>\n<p>Я набросал уже небольшой проект с парой кнопок для запуска и остановки проигрывателя и картинкой для привлечения внимания :)<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-24-28.png\" width=\"1280\" height=\"1024\" alt=\"Пробный проект.\" \/>\n<\/div>\n<p>Для работы в библиотекой BASS, нам потребуется в каталог с проектом добавить файл BASSFunctions.pas и указать его в разделе <b>uses<\/b>.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"1280\" data-ratio=\"1.25\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-21-50.png\" width=\"1280\" height=\"1024\" alt=\"Добавляем файл BASSFunctions.pas.\" \/>\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-22-52.png\" width=\"1280\" height=\"1024\" alt=\"Добавляем в раздел uses.\" \/>\n<\/div>\n<\/div>\n<p>Теперь собственно сама библиотека <b>libbass.so<\/b>. Нам необходимо добавить данную библиотек в наш проект, иначе ничего не заработает.<\/p>\n<p>Открываем архив bass24-android.zip и видим... Множество папок, нас интересует на данный момент только одна <b>libs<\/b>. Распаковываем её в каталог нашего проекта.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/-2015-03-24-10.29.21.png\" width=\"1273\" height=\"993\" alt=\"\" \/>\n<\/div>\n<p>В каталоге libs, есть три подкаталога, нас интересуют 2 из них:<\/p>\n<ul>\n<li>armeabi-v7a<\/li>\n<li>armeabi<\/li>\n<\/ul>\n<p>В них находятся два разных файла libbass.so.<\/p>\n<p>После того, как мы скопировали данный каталог в каталог проекта, снова возвращаемся к среде программирования и открываем раздел <b>Deployment<\/b>, для добавления наших библиотек в программу.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"1280\" data-ratio=\"1.25\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-36-12.png\" width=\"1280\" height=\"1024\" alt=\"Deployment\" \/>\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-37-49.png\" width=\"1280\" height=\"1024\" alt=\"Добавляем библиотеки\" \/>\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-38-56.png\" width=\"1280\" height=\"1024\" alt=\"\" \/>\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-39-15.png\" width=\"1280\" height=\"1024\" alt=\"\" \/>\n<\/div>\n<\/div>\n<p>После того, как мы добавили библиотеки в наш проект, надо поменять параметр «Remote Path» для каждой библиотеки соответственно на «<b>library\\lib\\armeabi<\/b>» и на «<b>library\\lib\\armeabi-v7a<\/b>». Данную процедуру надо проделать для обеих конфигураций «Debug» и «Release».<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"1280\" data-ratio=\"1.25\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-43-47.png\" width=\"1280\" height=\"1024\" alt=\"Библиотеки\" \/>\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-42-46.png\" width=\"1280\" height=\"1024\" alt=\"Конфигурации \"Debug\" и \"Release\"\" \/>\n<\/div>\n<\/div>\n<p>Ну что, вот всё и готово к началу написания кода, а код на самом деле достаточно простой.<\/p>\n<p>Объявляем глобальную переменную.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">var\n  uStream:HSTREAM;<\/code><\/pre><p>В момент создания формы инициализируем библиотеку.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">procedure TmainForm.FormCreate(Sender: TObject);\nbegin\n  \/\/ Загружаем и инициализируем библиотеку\n  Loadbass;\n  BASS_Init(-1,44100,0,Handle,nil);\nend;<\/code><\/pre><p>На кнопку «Играть» вещаем обработчик:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">procedure TmainForm.mainToolbarBarItems1Click(Sender: TObject);\nvar\n  otStream : TStringStream;\n  Result : integer;\nbegin\n  try\n\n    \/\/ Включаем индикатор загрузки контента\n    ind1.Enabled := True;\n    ind1.Visible := True;\n\n    \/\/ Код проигрывателя\n    Result := 0;\n\n    \/\/ Закрываем старый поток\n    BASS_StreamFree(uStream);\n\n    \/\/ Создаём новый поток\n    uStream :=\n      BASS_StreamCreateURL(PChar('http:\/\/motochelyabinsk.ru:8000\/play'),0,BASS_STREAM_STATUS or BASS_UNICODE,nil,nil);\n\n    \/\/ Включаем проигрывание\n    BASS_ChannelPlay(uStream, True);\n\n    \/\/ Получаем и выводим название текущего трека из скрипта на сайте\n    \/\/ Создаём поток UTF8\n    otStream := TStringStream.Create('', CP_UTF8);\n    \/\/ Делаем запрос к скрипту сайта\n    IdHTTP1.Get('motochelyabinsk.ru\/current-track.php', otStream);\n    IdHTTP1.Disconnect;\n    \/\/ Записываем название трека в Label\n    Label1.Text := otStream.DataString;\n    \/\/ Очищаем переменную потока\n    otStream.Free;\n\n    \/\/ Запустить таймер отслеживания изменений названия трека\n    Timer1.Enabled := True;\n\n    \/\/ Включаем и отключаем кнопки\n    btn1.Enabled := False;\n    btn2.Enabled := True;\n\n  except on E: Exception do\n    begin\n      ShowMessage('Ошибка доступа к сети!');\n    end;\n  end;\n\nend;<\/code><\/pre><p>Ну вот в общем самый простой и работающий пример создания проигрывателя интернет радиостанций.<br \/>\nP.S. Чуть позже, выложу готовый пример данного приложения.<\/p>\n",
            "date_published": "2015-03-24T09:48:04+05:00",
            "date_modified": "2021-01-22T23:57:04+05:00",
            "tags": [
                "Android",
                "BASS",
                "Delphi",
                "KTeam",
                "KTeam Radio",
                "libbass",
                "код",
                "Олнайн",
                "программирование",
                "программы",
                "Радио"
            ],
            "image": "https:\/\/alexbirukov.ru\/pictures\/-2015-03-24-09.25.46.png",
            "_date_published_rfc2822": "Tue, 24 Mar 2015 09:48:04 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "316",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js",
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/alexbirukov.ru\/pictures\/-2015-03-24-09.25.46.png",
                    "https:\/\/alexbirukov.ru\/pictures\/-2015-03-24-09.29.03.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-09-55-10.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-09-58-33.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-00-13.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-04-06.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-04-55.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-06-17.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-06-31.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-13-23.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-24-28.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-21-50.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-22-52.png",
                    "https:\/\/alexbirukov.ru\/pictures\/-2015-03-24-10.29.21.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-36-12.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-37-49.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-38-56.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-39-15.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-43-47.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-Delphi-XE7-2015-03-24-10-42-46.png"
                ]
            }
        }
    ],
    "_e2_version": 4134,
    "_e2_ua_string": "Aegea 11.3 (v4134)"
}