![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |
| Этот пользователь сказал Спасибо 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; |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (28.01.2012)
| ||
|
#25
|
||||
|
||||
|
пишет undeclared identifier 'ProcessMessages' может надо в uses что-то прописать?
|
|
#26
|
||||
|
||||
|
Application.ProcessMessages;
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (28.01.2012)
| ||
|
#27
|
||||
|
||||
|
огромное спасибо, подскажите плз, как сделать чтобы, при завершении песни первого потока, за 3 секунды (ну или меньше) запускался второй?
|
|
#28
|
||||
|
||||
|
Тут уже подобие PlayList-а нужно делать. Например, загрузить список песен в StringList и последовательно или рандомно проигрывать.
|
|
#29
|
||||
|
||||
|
я понимаю, но как реализовать, не обязательно при завершение, просто если трек меняется?
|
|
#30
|
||||
|
||||
|
Ну загрузи в ListBox и кликай.
|