|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
спасибо большое)
|
#17
|
||||
|
||||
вообще не получается(((( можете привести маленький примерчик?, заранее спс
|
#18
|
||||
|
||||
Самый простой вариант, без использования CallBack-а:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, bass, StdCtrls, ComCtrls; type TForm1 = class(TForm) btn1: TButton; btn2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); private { Private declarations } public procedure FreeStream; procedure PlayStream; procedure Play; function LoadStream(FileName : String) : Boolean; end; var Form1 : TForm1; Channel : HSTREAM; Volume, FadeTimer : Integer; PlaySync : HSYNC; Dir : String; Timer : DWORD; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin if BASS_Init(-1, 44100, 0, Handle, NIL) = False then ShowMessage('Ошибка'); GetDir(0, Dir); Channel := 0; FadeTimer := 3000; Volume := 100; end; procedure TForm1.FormDestroy(Sender: TObject); begin BASS_Free; end; procedure TForm1.FreeStream; begin if BASS_ChannelIsActive(Channel) = BASS_ACTIVE_PLAYING then BASS_ChannelSlideAttribute(Channel, BASS_ATTRIB_VOL, 0, FadeTimer); while BASS_ChannelIsSliding(Channel, BASS_ATTRIB_VOL) do Sleep(1); BASS_ChannelStop(Channel); // если канал воспроизводится, тормозим его BASS_StreamFree(Channel); // высвобождаем память Channel := 0; end; procedure TForm1.PlayStream; begin case BASS_ChannelIsActive(Channel) of BASS_ACTIVE_STOPPED : begin Play; end; end; end; procedure TForm1.Play; //функция воспроизведения канала давно загруженного в память begin BASS_ChannelSetAttribute(Channel, BASS_ATTRIB_VOL, 0); BASS_ChannelPlay(Channel, False); BASS_ChannelSlideAttribute(Channel, BASS_ATTRIB_VOL, Volume / 100, FadeTimer); end; function TForm1.LoadStream(FileName : String) : Boolean; var Time : DWORD; begin if Channel <> 0 then FreeStream; Channel := BASS_StreamCreateFile(False, PChar(FileName), 0, 0, 0); Time := Trunc(BASS_ChannelBytes2Seconds(Channel, BASS_ChannelGetLength(Channel, BASS_POS_BYTE))); Result := Channel <> 0; end; procedure TForm1.btn1Click(Sender: TObject); begin if LoadStream(Dir + '\First.mp3') then PlayStream; end; procedure TForm1.btn2Click(Sender: TObject); begin if LoadStream(Dir + '\Second.mp3') then PlayStream; end; end. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (27.01.2012)
|
#19
|
||||
|
||||
странно, не проигрывается
|
#20
|
||||
|
||||
а не, ошибочка, все норм работает, спс большое
|
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (28.01.2012)
|
#22
|
||||
|
||||
все играет, а подскажите плз как сделать проверку и чем можно заменить sleep, а то если часто нажимать, зависает, как сделать, чтобы если текущая песня равняется, той которую запускает, то выходим из процедуры, а если нет то продолжаем?
|
#23
|
||||
|
||||
и можно еще один вопросик, как сделать чтобы, при завершении песни первого потока, за 3 секунды (ну или меньше) запускался второй?
|
#24
|
||||
|
||||
1. Какую проверку.
2. Так: Код:
while BASS_ChannelIsSliding(Channel, BASS_ATTRIB_VOL) do begin ProcessMessages; Sleep(1); end; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (28.01.2012)
|
#25
|
||||
|
||||
пишет undeclared identifier 'ProcessMessages' может надо в uses что-то прописать?
|
#26
|
||||
|
||||
Application.ProcessMessages;
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (28.01.2012)
|
#27
|
||||
|
||||
огромное спасибо, подскажите плз, как сделать чтобы, при завершении песни первого потока, за 3 секунды (ну или меньше) запускался второй?
|
#28
|
||||
|
||||
Тут уже подобие PlayList-а нужно делать. Например, загрузить список песен в StringList и последовательно или рандомно проигрывать.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#29
|
||||
|
||||
я понимаю, но как реализовать, не обязательно при завершение, просто если трек меняется?
|
#30
|
||||
|
||||
Ну загрузи в ListBox и кликай.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |