Я створюю аудіоплеєр для Linux. Пишу я його на freepascal у Делфі-подібній IDE Lazarus з використанням аудіобібліотеки BASS.
Але бібліотеки для Linux є, але знайти документацію по їх використанню у Linux вкрай складно. І навіть на форумі підтримки цих бібліотек я не знайшов гідного рішення.
Тому хочу поділитись з зацікавленими людьми моїми напрацюваннями.
З динамічною бібліотекою lazdynamic_bass в мене начебто склалося, але при спробі додати ще один ефект обробки каналу 'Compressor', виявилось що він відсутній у цій бібліотеці. Тому я вирішив підключити бібліотеку libbass_fx.so. Якщо завантаження бібліотек кодеків не викликало ніяких проблем, то з підключенням цієї бібліотеки виявилось не все так просто.
Динамічне завантаження за допомогою бібліотеки DynLibs це перше що дозволило якось завантажити цю бібліотеку.
lib:=LoadLibrary(Pchar(Path+'libbass_fx.so'));
Це спрацьовувало при шляху до бібліотеки '.../lib/libbass_fx.so' , але якщо додати додаткову теку до шляху цієї бібліотеки наприклад '.../lib/fx/libbass_fx.so', то вже бібліотека не завантажувалася. Звісно що файл бібліотеки знаходився у цій підтеці.
Але і це не найстрашніше. Мені вдалося додати до проєкту таким чином ефект Compressor2 з цієї бібліотеки і він навіть працював як треба, але мене занепокоїло, що виклик функції BASS_FX_GetVersion викликало виключення.
І виявилося що мої занепокоєння не марні. При спробі додати до ефектів інший ефект BASS_ATTRIB_TEMPO він також викликав виключення і мені довелося шукати відповіді на свої питання у тексті Dynamic_BassFX.pas
Виявилося що у цій бібліотеці є схожа функція для завантаження бібліотеки як і у lazdynamic_bass.pas
У lazdynamic_bass.pas ця функція Load_BASSDLL(PChar(fname)) завантажує бібліотеку BASS.
У Dynamic_BassFX.pas ця функція Load_BASSFXDLL(PChar(fname)) завантажує бібліотеку BASS_FX.
Тепер всі функції цієї бібліотеки працюють коректно!
Комментариев нет:
Отправить комментарий