![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Подскажите как реализовать следующее: нужно сделать радио с добавлением и воспроизведением в плейлист.
к примеру есть кнопка с определенной станцией Код:
procedure TForm1.btn1Click(Sender: TObject);
begin
BASS_Free;
BASS_Init(-1, 44100, 2, 0, nil);
chan:= BASS_StreamCreateURL (PAnsiChar('http://88.191.130.174:6404/'),0,0,nil,0);
Bass_ChannelPlay(chan,False);
end;Это работает! Дальше есть edit в который пишем url станции, при нажатии кнопки заносит данный url в текстовый файл. Потом этот файл выводим в listbox и вот тут нужно при выделении определенной строки с url воспроизводить именно эту строку. Возможно думаю что как то так можно сделать, но не чего не выходит. Код:
procedure TForm1.btn9Click(Sender: TObject);
var i: integer;
begin
for i := lst1.Items.Count - 1 downto 0 do
if lst1.Selected[i] then
BASS_Free;
BASS_Init(-1, 44100, 2, 0, nil);
chan:= BASS_StreamCreateURL (PAnsiChar('(i)'),0,0,nil,0);
Bass_ChannelPlay(chan,False);
end; Помогите люди добрые! Последний раз редактировалось poropeked, 05.06.2011 в 20:08. |
|
#2
|
|||
|
|||
|
наверное все таки вот так:
Код:
procedure TForm1.btn9Click(Sender: TObject);
begin
if ListBox1.ItemIndex > -1 then
begin
BASS_Free;
BASS_Init(-1, 44100, 2, 0, nil);
chan:= BASS_StreamCreateURL(PAnsiChar(ListBox1.Items[ListBox1.ItemIndex]),0,0,nil,0);
Bass_ChannelPlay(chan,False);
end else
ShowMessage('Из списка ничего не выбрано!');
end;P.S.: на выделенное красным обратите внимание, на будущее... Последний раз редактировалось Assistant, 05.06.2011 в 20:39. |
|
#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; |