{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "В наушниках по жизни: заметки с тегом libbass",
    "_rss_description": "Здесь я пишу свои идеи, мысли, описываю события своей жизни и просто делаю личные и рабочие заметки. «А Вы что, собираетесь жить вечно?»",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/alexbirukov.ru\/?go=tags\/libbass\/",
    "feed_url": "https:\/\/alexbirukov.ru\/?go=tags%2Flibbass%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": "329",
            "url": "https:\/\/alexbirukov.ru\/?go=all\/udio-pleer-na-delphi-dlya-ios-s-primeneniem-biblioteki-bass\/",
            "title": "Аудио-плеер на Delphi для iOS с применением библиотеки BASS.",
            "content_html": "<p>Прошло довольно много времени с момента написания первой статьи «<a href=\"http:\/\/alexbirukov.ru\/?go=all\/udio-pleer-na-delphi-dlya-android-code-gear-rad-studio-xe7\/\">Аудио-плеер на Delphi для Android с применением библиотеки BASS<\/a>». И теперь я решил написать вторую часть статьи про запуск и использование библиотеки BASS под iOS. В данном конкретном случае, так же? как и в предыдущей статье, целью подключения библиотеки, стало использование функции проигрывания сетевого аудиопотока.<\/p>\n<h2>Настройка<\/h2>\n<p>Как и в случае с настройкой под Android, для iOS нам потребуются дополнительные библиотеки, без которых скомпилировать проект не получиться. Воспользуемся набором библиотек <a href=\"http:\/\/sourceforge.net\/projects\/dpfdelphiios\/\">DPF iOS Native Components<\/a>. Данные библиотеки нужны для подключения iOS фреймворка работы со звуком.<\/p>\n<p>Скачиваем архив с файлами с <a href=\"http:\/\/sourceforge.net\/projects\/dpfdelphiios\/\">официального сайта<\/a> или с <a href=\"http:\/\/alexbirukov.ru\/files\/radio-ios\/DPF.iOS.Native.Components.v9.6.1.zip\">моего сайта<\/a>.<\/p>\n<p>После того, как мы скачали все необходимые дополнительные файлы, приступаем к установке компонентов.<\/p>\n<p>Я рекомендую (во избежании дополнительных проблем с подключением) распаковать файлы в папку DPF.iOS.Native.Components.v9.6.1.zip в корень диска C.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-00-54-41.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<p>Затем, в выпадающем списке поочерёдно выбираем следующие пункты платформ:<\/p>\n<ol start=\"1\">\n<li>32-bit windows<\/li>\n<li>iOSSimulator<\/li>\n<li>iOSDevice32<\/li>\n<li>iOSDevice64<\/li>\n<\/ol>\n<p>В каждом из пунктов добавляем в раздел «Library path» путь к нашим компонентам. В нашем случае <b>C:\\DPF.iOS.Native.Components.v9.6.1\\<\/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-XE10-2016-01-04-00-56-43.png\" width=\"1280\" height=\"1024\" alt=\"Добавление фреймворка\" \/>\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-00-57-19.png\" width=\"1280\" height=\"1024\" alt=\"Добавление фреймворка\" \/>\n<\/div>\n<\/div>\n<p>Теперь, необходимо в разделе SDK Manager указать, какие фрейворки iOS нам потребуются. Для этого открываем Tools->Options->SDK Manager, пролистываем появившийся список вниз до раздела <b>Frameworks<\/b>, выбираем в списке один из фремворков, нажимаем на кнопку <b>Add the new path item<\/b> и добавляем следующие фреймворки:<\/p>\n<ul>\n<li>\/System\/Library\/Frameworks\/EventKit<br \/>\n\/System\/Library\/Frameworks\/MessageUI<br \/>\n\/System\/Library\/Frameworks\/AudioToolbox<br \/>\n\/System\/Library\/Frameworks\/Social<br \/>\n\/System\/Library\/Frameworks\/QuickLook<br \/>\n\/System\/Library\/Frameworks\/SystemConfiguration<br \/>\n\/System\/Library\/Frameworks\/GameKit<br \/>\n\/System\/Library\/Frameworks\/CoreBluetooth<br \/>\n\/System\/Library\/Frameworks\/Accounts<br \/>\n\/System\/Library\/Frameworks\/AdSupport<br \/>\n\/System\/Library\/Frameworks\/ExternalAccessory<br \/>\n\/System\/Library\/Frameworks\/AddressBookUI (No need in XE8 and later)<br \/>\n\/System\/Library\/Frameworks\/AddressBook (No need in XE8 and later)<br \/>\n\/System\/Library\/Frameworks\/MobileCoreServices (No need in XE8 and later)<br \/>\n\/System\/Library\/Frameworks\/MapKit (No need in XE8 and later)<br \/>\n\/System\/Library\/Frameworks\/LocalAuthentication.framework\/LocalAuthentication (iOS 8.0 and later)<\/li>\n<\/ul>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Add.png\" width=\"1280\" height=\"1024\" alt=\"добавление фрейворков\" \/>\n<\/div>\n<p>В качестве пути на удалённом хосте требуется указывать путь «<b>$(SDKROOT)\/System\/Library\/Frameworks<\/b>», а качестве имени, название фремворка. Для примера:<br \/>\n<b>Путь:<\/b> $(SDKROOT)\/System\/Library\/Frameworks<br \/>\n<b>Имя:<\/b> EventKit<br \/>\nБольше нигде никаких галочек ставить и выбирать не требуется.<\/p>\n<p>Должно получиться так.<\/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-XE10-2016-01-04-01-07-03.png\" width=\"1280\" height=\"1024\" alt=\"Добавление фреймворков\" \/>\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Frameworks.png\" width=\"1199\" height=\"733\" alt=\"Список фремворков\" \/>\n<\/div>\n<\/div>\n<p>В разделе <b>Libs<\/b>, аналогичным образом необходимо добавить библиотеку <b>\/usr\/lib\/libxml2.dylib<\/b>. Путь к ней указать, как <b>$(SDKROOT)\/usr\/lib\/<\/b><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-10-12.png\" width=\"1280\" height=\"1024\" alt=\"Библиотека libxml2.dylib\" \/>\n<\/div>\n<p>После добавления всех фреймворков в список необходимо обязательно нажать на кнопку <b>Update local File Cache<\/b>. При этом MAC с запущенным PAServer’ом должен быть настроен и доступен.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-18-15.png\" width=\"1280\" height=\"1024\" alt=\"Update local File Cache\" \/>\n<\/div>\n<p>Теперь нам потребуется скомпилировать и установить компоненты. Для этого нажимаем File -> Open Project. Открываем проект из папки компонентов, соответствующий вашей среде программирования.<\/p>\n<p>Нажимаем правой кнопкой на проекте в инспекторе проекта и выбираем пункт <b>«Build»<\/b>, начнётся построение проекта.<\/p>\n<p>После завершение построение, опять нажимаем правой кнопкой на проекте в инспекторе и выбираем пункт <b>«Install»<\/b>.<\/p>\n<p>Компоненты готовы к работе. Приступим к созданию проекта.<\/p>\n<h2>Проект<\/h2>\n<p>И вот, всё почти готово, для использования библиотек Bass на iOS. Осталось задействовать саму библиотеку и добавить некоторый код в проект.<\/p>\n<p>Для работы с библиотекой, нам потребуется файл <b>libbass.a<\/b>. Его необходимо добавить в корень каталога проекта. Откуда конкретно у меня данный файл, я точно сказать не смогу, я нашёл его где-то на просторах форума <a href=\"http:\/\/www.un4seen.com\/\">un4seen.com<\/a>. Здесь я выкладываю <a href=\"http:\/\/alexbirukov.ru\/files\/radio-ios\/libbass.a\">рабочий файл<\/a> из своих проектов.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-28-45.png\" width=\"1280\" height=\"1024\" alt=\"Файл libbass.a\" \/>\n<\/div>\n<p>Но, одного файла для работы будет недостаточно. Так же, в проект необходим добавить ещё 2 файла *.pas. Первый будет необходим для работы с функциями libbass, второй послужит для работы с фреймворком iOS для работы с сетевыми потоками.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-34-36.png\" width=\"1280\" height=\"1024\" alt=\"Файлы проекта\" \/>\n<\/div>\n<p>Необходимо скачать данный архив, распаковать его содержимое в корень проекта и подключить <a href=\"http:\/\/alexbirukov.ru\/files\/radio-ios\/adv-libbass.7z\">данные файлы<\/a> к проекту.<\/p>\n<p>В раздел <b>implementation<\/b> необходимо добавить следующий код:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">{$O-}\n  function BASS_Init(device: LongInt; freq: DWORD; flags: DWORD; win: Pointer; clsid: Pointer) : BOOL; cdecl; external 'libbass.a' name 'BASS_Init';\n  function BASS_StreamPutData(handle: HSTREAM; buffer: Pointer; length: DWORD): DWORD; cdecl; external 'libbass.a' name 'BASS_StreamPutData';\n  function BASS_StreamFree(handle: HSTREAM): BOOL; cdecl;  external 'libbass.a' name 'BASS_StreamFree';\n  function BASS_StreamCreate(freq: DWORD; chans: DWORD; flags: DWORD; proc: Pointer; user: Pointer): HSTREAM;  cdecl;  external 'libbass.a' name 'BASS_StreamCreate';\n  function BASS_StreamCreateFile(mem: BOOL; f: Pointer; offset, length: QWORD; flags: Cardinal): HSTREAM; cdecl; external 'libbass.a' name 'BASS_StreamCreateFile';\n  function BASS_StreamCreateURL(url: Pointer; offset: Cardinal; flags: Cardinal; proc: DOWNLOADPROC; user: Pointer):HSTREAM; cdecl; external 'libbass.a' name 'BASS_StreamCreateURL';\n  function BASS_ChannelPlay(handle: HSTREAM; restart: BOOL): BOOL; cdecl;  external 'libbass.a' name 'BASS_ChannelPlay';\n  function BASS_ChannelStop(handle: DWORD): BOOL; cdecl; external 'libbass.a' name 'BASS_ChannelStop';\n{$O+}<\/code><\/pre><h2>Работа с аудиопотоком<\/h2>\n<p>Для корректной работы с аудипотоками, требуется подключение аудио-фреймворка iOS.  Самый простой способ сделать это, кинуть на форму компонент DPFAVPlayer, что именно я и сделал. Это исключает необходимость выполнения дополнительных манипуляций.<\/p>\n<p>Так же, для нормальной работы программы, я разделал функционал на несколько потоков, чтобы при проигрывании аудио потоков само приложение не тормозило и не останавливалось по неизвестным причинам. Приведу код работы из рабочего проекта.<\/p>\n<p>Глобальные переменные.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">uStream:HSTREAM;\nchan: HSTREAM = 0;<\/code><\/pre><p>При нажатии на кнопку Play в приложении запускается поток:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/ Запускаем поток вещания\nIdThreadComponent1.Start;<\/code><\/pre><p>«Тело» потока:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">try\n\n    \/\/ Инициализируем libbass\n    BASS_Init(-1,44100,0,Handle,nil);\n\n    \/\/ Закрываем предыдущие потоки (не обязательно, взято из примера)\n    BASS_StreamFree(uStream);\n\n    messageText := 'Буферизация...';\n    IdThreadComponent1.Synchronize(ShowMess);\n    \/\/ Создаём поток данных\n    uStream:=BASS_StreamCreateURL(Pchar(stantion),0,BASS_STREAM_STATUS or BASS_UNICODE,nil,nil);\n\n    if uStream = 0 then\n    begin\n      ShowMessage('Ошибка создания потока!');\n    end\n    else\n    begin\n\n      if not Bass_ChannelPlay(uStream,true) then\n      begin\n        ShowMessage('Не удалось воспроизвести поток!');\n      end;\n\n      messageText := currentLabel;\n      IdThreadComponent1.Synchronize(ShowMess);\n      IdThreadComponent1.Synchronize(deactivateIndicator);\n    end;\n\n  except on E: Exception do\n    begin\n      {$IFDEF DEBUG}\n        ShowMessage(e.Message);\n      {$ELSE}\n        ShowMessage('Ошибка подключения к выбранной радиостанции.');\n      {$ENDIF}\n    end;\n  end;\n\n  IdThreadComponent1.Terminate;<\/code><\/pre><p>Остановка проигрывания<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">\/\/ Останавливаем плеер\nBASS_ChannelStop(uStream);<\/code><\/pre><p>Как вы могли заметить, во время запуска потока, инициализируется библиотека Bass, очищаются имеющиеся потоки и создаётся новый интернет поток при помощи функции <b>BASS_StreamCreateURL<\/b>, где <b>stantion<\/b> строковая переменная, содержащая ссылку на поток.<\/p>\n<p>Данный набор минимальных настроек, позволит вам работать с библиотекой Bass на устройствах под управлением iOS.<\/p>\n<h2>Проигрывание в фоне<\/h2>\n<p>Чтобы заставить ваше приложение продолжать проигрывание в фоне, необходимо сделать дополнительные настройки проекта. В XE10 наконец-то появился параметр <b>UIBackgroundModes<\/b>. В настройках проекта устанавливаем значения: <b>audio<\/b> И <b>remote-notification<\/b> (в случае использования Push уведомлений).<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-52-53.png\" width=\"1280\" height=\"1024\" alt=\"\" \/>\n<\/div>\n<h2>Окончание<\/h2>\n<p>Ну вот в общем и всё, что требуется сделать для создания проекта с использованием libbass на iOS. Возможно, при написании статьи я допустил какие-либо неточности и недочёты, т. к. проекты сделаны давно, а статья написана по следам этих проектов, поэтому я мог упустить нюансы. Обо всех замеченных недочётах и ошибках вы можете писать мне в комментариях, буду рад вашим отзывам.<\/p>\n",
            "date_published": "2016-01-04T02:00:24+05:00",
            "date_modified": "2021-01-30T20:39:54+05:00",
            "tags": [
                "BASS",
                "Delphi",
                "iOS",
                "libbass",
                "Seattle",
                "XE10",
                "программирование"
            ],
            "image": "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-00-54-41.png",
            "_date_published_rfc2822": "Mon, 04 Jan 2016 02:00:24 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "329",
            "_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\/Windows-7-x64-XE10-2016-01-04-00-54-41.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-00-56-43.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-00-57-19.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Add.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-07-03.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Frameworks.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-10-12.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-18-15.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-28-45.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-34-36.png",
                    "https:\/\/alexbirukov.ru\/pictures\/Windows-7-x64-XE10-2016-01-04-01-52-53.png"
                ]
            }
        },
        {
            "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)"
}