|
|
Регистрация | << Правила форума >> | 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.: на выделенное красным обратите внимание, на будущее... взялся из неоткуда, ничего не прошу, помогаю просто так ICQ: 593977748 - стучать в случае КРАЙНЕЙ необходимости, ну, или если вы со Ставрополя Последний раз редактировалось 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; |