Очень люблю эту DLL-библиотеку
Ваш алгоритм не понятен. Если в списке выбран пункт(ы), то Вы освобождаете память (BASS_Free), занимаемую этой библиотекой, потом опять предварительно загружаете библиотеку для работы с ней (BASS_Init).
Если Вы хотите освободить память, занимаемую не самой DLL, а потоком воспроизведения, то используйте данный код (я понимаю, что Вы именно это и хотите сделать):
Код:
BASS_ChannelFree(Channel);
Если немного подправить ваш код, то получится следующие (я бы делал таким образом):
Объявляете нейкую переменную типа QWORD или 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;