![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#3
|
||||
|
||||
![]() Очень люблю эту DLL-библиотеку
![]() Ваш алгоритм не понятен. Если в списке выбран пункт(ы), то Вы освобождаете память (BASS_Free), занимаемую этой библиотекой, потом опять предварительно загружаете библиотеку для работы с ней (BASS_Init). Если Вы хотите освободить память, занимаемую не самой DLL, а потоком воспроизведения, то используйте данный код (я понимаю, что Вы именно это и хотите сделать): Код:
BASS_ChannelFree(Channel); Если немного подправить ваш код, то получится следующие (я бы делал таким образом): Объявляете нейкую переменную типа QWORD или Cardinal в своей форме или юните, не в процедуре: Код:
var Channel: Cardinal; При запуске программы в событии TForm.OnCreate инитиализируете эту библиотеку: Код:
procedure MyForm.MyFormCreate(Sender: TObject); begin BASS_Init(-1, 44100, 2, 0, nil); // Инитиализация end; В событии TButton.OnClick пишите следующие: Код:
procedure MyForm.PlayButtonClick(Sender: TObject); begin if Channel <> 0 then begin BASS_ChannelFree(Channel); // Освобождаем поток воспроизведения, если он был ранее создан Channel := 0; end; if MyEdit.Text <> '' then begin Channel := BASS_StreamCreateURL(PAnsiChar(MyEdit.Text), 0, 0, nil, 0); if Channel <> 0 then BASS_ChannelPlay(Channel, False); end; end; P.S. MyEdit - это TEdit, куда Вы вводите адрес URL. При освобождении формы из памяти в событии TForm.OnDestroy пишем: Код:
procedure MyForm.MyFormDestroy(Sender: TObject); begin BASS_Free; // Освобождение DLL из памяти end; |