![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Все воспроизводится, затухание происходит, вот только музыка играет только 3 секунды, FadeTime - это время через которое звук должен возрастать до 100.
Помогите плз) Вот код: Код:
procedure PlayStreamSync(handle: HSYNC; Stream, data: DWORD; user: Pointer); stdcall;
begin
BASS_ChannelRemoveSync(Stream,Handle);
BASS_StreamFree(Channel);
Channel:=Buffer;
Buffer:=0;
end;
procedure TForm1.FreeStream(var Stream: HStream);
begin
BASS_ChannelStop(Stream);
BASS_StreamFree(Stream);
end;
procedure TForm1.PlayStream;
begin
if Buffer=0 then Exit;
if Channel=0 then begin
Channel:=Buffer;
Play;
end else
if BASS_ChannelIsActive(Channel)=Bass_Active_Stopped then begin
FreeStream(Channel);
Channel:=Buffer;
Play;
end else begin
BASS_ChannelSlideAttribute(Channel,BASS_ATTRIB_VOL,0,FadeTimer);
BASS_ChannelSetAttribute(Buffer,BASS_ATTRIB_VOL,0);
BASS_ChannelPlay(Buffer,False);
end;
PlaySync:=BASS_ChannelSetSync(Buffer,BASS_SYNC_SLIDE,0,@PlayStreamSync,nil);
BASS_ChannelSlideAttribute(Buffer,BASS_ATTRIB_VOL,Volume / 100,FadeTimer)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if bass_init(-1, 44100,0, handle,nil)=false then
showmessage('Îøèáêà');
Channel:=0;
Buffer:=0;
FadeTimer:=3000;
Volume:=100;
end;
procedure TForm1.Play;
begin
if Channel=0 then Exit;
BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_VOL,0);
BASS_ChannelPlay(Channel,False);
BASS_ChannelSlideAttribute(Channel,BASS_ATTRIB_VOL,Volume / 100,FadeTimer)
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bass_free();
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
if Open.Execute=false then
exit;
LoadStream(Open.FileName);
end;
procedure TForm1.sButton1Click(Sender: TObject);
begin
LoadStream('D:\MuZa\Aksent\Aksent - Hood Boy.mp3');
PlayStream;
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
bass_channelplay(Channel, false);
end;
procedure TForm1.LoadStream(FileName: string);
begin
if Buffer<>0 then Buffer:=0;
Buffer:=Bass_StreamCreateFile(False,PChar(FileName),0,0,0);
end;
procedure TForm1.sButton3Click(Sender: TObject);
begin
LoadStream('D:\MuZa\Adidas\Adidas - New Hit.mp3');
PlayStream;
end; |
|
#2
|
||||
|
||||
|
ну помогите плиииз!!!)
|
|
#3
|
||||
|
||||
|
Помогаем:
Код:
BASS_ChannelSetAttribute(Buffer, BASS_ATTRIB_VOL, 0); ![]() |
|
#4
|
||||
|
||||
|
нет, это не то, звук все равно прорывается всего лишь 3 сек.
Я думаю что проблема в этом: Код:
procedure TForm1.PlayStream;
begin
if Buffer=0 then Exit;
if Channel=0 then begin
Channel:=Buffer;
Play;
end else
if BASS_ChannelIsActive(Channel)=Bass_Active_Stopped then begin
FreeStream(Channel);
Channel:=Buffer;
Play;
end else begin
BASS_ChannelSlideAttribute(Channel,BASS_ATTRIB_VOL,0,FadeTimer);
BASS_ChannelSetAttribute(Buffer,BASS_ATTRIB_VOL,0);
BASS_ChannelPlay(Buffer,False);
end;
PlaySync:=BASS_ChannelSetSync(Buffer,BASS_SYNC_SLIDE,0,@PlayStreamSync,nil);
BASS_ChannelSlideAttribute(Buffer,BASS_ATTRIB_VOL,Volume / 100,FadeTimer)
end; |
|
#5
|
||||
|
||||
|
Что значит не то? Именно то. Ты в двух местах гасишь звук. Выкладывай весь проект.
|
|
#6
|
||||
|
||||
|
вот весь мой проект
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, bass, StdCtrls, sButton, sSkinManager, sDialogs, ExtCtrls,
sPanel, sScrollBar, sLabel, Buttons, sSpeedButton, sGauge, ComCtrls,
acProgressBar, MPlayer, sListBox, sTrackBar;
type
TForm1 = class(TForm)
SkinManager: TsSkinManager;
btn1: TsButton;
btn2: TsButton;
sButton2: TsButton;
spnl1: TsPanel;
Open: TsOpenDialog;
sScrollBar1: TsScrollBar;
sLabel1: TsLabel;
sLabel2: TsLabel;
tmr1: TTimer;
tmr2: TTimer;
sButton1: TsButton;
sLabel3: TsLabel;
sGauge1: TsGauge;
Progress: TsProgressBar;
ListBox: TsListBox;
sTrackBar1: TsTrackBar;
sLabel4: TsLabel;
sTrackBar2: TsTrackBar;
sButton3: TsButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure sButton1Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure sButton3Click(Sender: TObject);
procedure sButton2Click(Sender: TObject);
private
{ Private declarations }
public
procedure Play;
procedure PlayStream;
procedure FreeStream(var Stream: HStream);
procedure LoadStream(FileName: string);
end;
var
Form1: TForm1;
track: boolean;
Channel, Buffer: HSTREAM;
Volume, FadeTimer: Integer;
PlaySync: HSYNC;
implementation
{$R *.dfm}
procedure PlayStreamSync(handle: HSYNC; Stream, data: DWORD; user: Pointer); stdcall;
begin
BASS_ChannelRemoveSync(Stream,Handle);
BASS_StreamFree(Channel);
Channel:=Buffer;
Buffer:=0;
end;
procedure TForm1.FreeStream(var Stream: HStream);
begin
BASS_ChannelStop(Stream);
BASS_StreamFree(Stream);
end;
procedure TForm1.PlayStream;
begin
if Buffer=0 then Exit;
if Channel=0 then begin
Channel:=Buffer;
Play;
end else
if BASS_ChannelIsActive(Channel)=Bass_Active_Stopped then begin
FreeStream(Channel);
Channel:=Buffer;
Play;
end else begin
BASS_ChannelSlideAttribute(Channel,BASS_ATTRIB_VOL,0,FadeTimer);
BASS_ChannelSetAttribute(Buffer,BASS_ATTRIB_VOL,0);
BASS_ChannelPlay(Buffer,False);
end;
PlaySync:=BASS_ChannelSetSync(Buffer,BASS_SYNC_SLIDE,0,@PlayStreamSync,nil);
BASS_ChannelSlideAttribute(Buffer,BASS_ATTRIB_VOL,Volume / 100,FadeTimer)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if bass_init(-1, 44100,0, handle,nil)=false then
showmessage('Îøèáêà');
Channel:=0;
Buffer:=0;
FadeTimer:=3000;
Volume:=100;
end;
procedure TForm1.Play;
begin
if Channel=0 then Exit;
BASS_ChannelSetAttribute(Channel,BASS_ATTRIB_VOL,0);
BASS_ChannelPlay(Channel,False);
BASS_ChannelSlideAttribute(Channel,BASS_ATTRIB_VOL,Volume / 100,FadeTimer)
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bass_free();
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
if Open.Execute=false then
exit else ListBox.Items.Add(Open.FileName);
LoadStream(Open.FileName);
end;
procedure TForm1.sButton1Click(Sender: TObject);
begin
LoadStream('D:\MuZa\Aksent\Aksent - Hood Boy.mp3');
PlayStream;
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
bass_channelplay(Channel, false);
end;
procedure TForm1.LoadStream(FileName: string);
begin
if Buffer<>0 then Buffer:=0;
Buffer:=Bass_StreamCreateFile(False,PChar(FileName),0,0,0);
end;
procedure TForm1.sButton3Click(Sender: TObject);
begin
LoadStream('D:\MuZa\Adidas\Adidas - New Hit.mp3');
PlayStream;
end;
end. |
|
#7
|
||||
|
||||
|
Предлагаешь мне самому все контролы на форму кидать?
|
|
#8
|
||||
|
||||
|
не понимаю о чем вы
|
|
#9
|
||||
|
||||
|
В архиве проект давай, мне лень всё создавать с нуля, проще посмотреть, что у тебя там намудрено.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (27.01.2012)
| ||
|
#11
|
||||
|
||||
|
Не стоило в архив вкладывать библиотеку и mp3, тогда и "вес" бы значительно уменшился. Сейчас посмотрю.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (27.01.2012)
| ||
|
#12
|
||||
|
||||
|
учту, спасибо)
|
|
#13
|
||||
|
||||
|
Порезал всё, что только мог - играет:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, bass, StdCtrls;
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;
implementation
{$R *.dfm}
procedure PlayStreamSync(Handle: HSYNC; Stream, Data: DWORD; User: Pointer); stdcall;
begin
end;
procedure TForm1.FreeStream;
begin
BASS_ChannelStop(Channel);
// если канал воспроизводится, тормозим его
BASS_StreamFree(Channel);
// высвобождаем память
Channel := 0;
end;
procedure TForm1.PlayStream;
begin
if BASS_ChannelIsActive(Channel) = BASS_Active_Stopped then
Play
else
begin
BASS_ChannelSlideAttribute(Channel, BASS_ATTRIB_VOL, 0, FadeTimer);
BASS_ChannelSetAttribute(Channel, BASS_ATTRIB_VOL, 0);
BASS_ChannelPlay(Channel, False);
end;
PlaySync := BASS_ChannelSetSync(Channel, BASS_SYNC_SLIDE, 0, @PlayStreamSync, NIL);
BASS_ChannelSlideAttribute(Channel, BASS_ATTRIB_VOL, Volume / 100, FadeTimer);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if BASS_Init(-1, 44100, 0, Handle, NIL) = False then
ShowMessage('Ошибка');
GetDir(0, Dir);
Channel := 0;
// приравниваем к 0, на случай если Windows заполнить переменные числами.
FadeTimer := 3000;
Volume := 100;
end;
procedure TForm1.Play; //функция воспроизведения канала давно загруженного в память
begin
if Channel = 0 then
Exit;
BASS_ChannelSetAttribute(Channel, BASS_ATTRIB_VOL, 0);
BASS_ChannelPlay(Channel, False);
BASS_ChannelSlideAttribute(Channel, BASS_ATTRIB_VOL, Volume / 100, FadeTimer);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BASS_Free;
end;
function TForm1.LoadStream(FileName : String) : Boolean;
begin
if Channel <> 0 then
FreeStream;
Channel := BASS_StreamCreateFile(False, PChar(FileName), 0, 0, 0);
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, 27.01.2012 в 01:41. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (27.01.2012)
| ||
|
#14
|
||||
|
||||
|
спасибо большое), только первый канал завершается сразу, а второй возрастает, не подскажите, как сделать, чтобы когда менялась песня, первый канал затухал, а второй возрастал?
|
|
#15
|
||||
|
||||
|
Вот для этого и пригодится процедура PlayStreamSync, раньше от неё толку не было. В ней вести проверку на остаток до завершения и при достижении нужного значения использовать BASS_ChannelSlideAttribute.
Советую посетить авторский сайт, там на форуме можно много чего найти, но нужно знать английский. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (27.01.2012)
| ||