Prosty MP3 player oparty na bibliotece Bass - jest problem!!

0

Cześć

Od niedawna piszę playera MP3 opartego na bibliotece Bass 2.1. wszytko szło ok, ale natknąlem się na problem. Ponieważ jestem nowicjuszem jesli chodzi o tego typu biblioteki, mam trochę kłopotów. Otóż problemem tym jest (śmieszna rzecz ) przycisk "pause". W moim mp3 playerze występuje analizator widma (z tejze biblioteki) oraz progress bar. Jak nacisnę przycisk "pause", muzyka staje, staje analizator widma, progress bar znika ( tzn znika niebieski pasek na progress barze). po ponownym nacisnięciu przycisku nic się nie dzieje!!. Ale gdy nacisne przycisk "play", muzyka gra od momentu kiedy nacisnąłem "pause" (czyli dobrze:)) ale analizator widma ani drgnie!. To samo z progress barem.

pytanko brzmi więc: jak zrobić ten cholerny przycisk "pause" aby miał przysłowiowe ręce i nogi czyli zatrzymywał muzykę, analizator widma i progress bar oraz po ponownym kliknięciu wznawiał muzykę, analizator i progress bar od momentu w którym ją przerwano.

Jeśli ktoś z was zetknął się z podobnym problemem, proszę niech znajdzie chwilkę czasu i napisze swoje przemyślenia.

Z góry za wszystkie odpowiedzi dziękuję</delphi>

0

pokaż kod, który masz podpięty pod Pause

0

kod od "pause" na razie mam taki

procedure TForm1.PauzaClick(Sender: TObject);
begin
Bass_Pause;
BASS_ChannelPause(Channel);
BASS_StreamGetFilePosition(Channel,BASS_FILEPOS_DECODE);
end;

Wiadomości jak zrobić tę "pause" wziąłem z instrukcji do Bass'a. Ale przyznam się, że jest mi cięzko rozszyfrować o co tam chodzi.

0

BASS_StreamGetFilePosition(Channel,BASS_FILEPOS_DECODE);

A to do czego? Jeśli chcesz pobrać aktualny czas utworu, to uzywasz BASS_Channel_GetPosition(). Poza tym, pokaż jeszcze tworzenie strumienia.

0

Tutaj macie prawie cały kod:

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1 : TForm1;
  Channel : DWORD;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
BASS_Init(1, 44100, 0, Application.Handle, nil);
Spectrum:=TSpectrum.Create(Paint.Width, Paint.Height);
Icon.LoadFromFile('bandit.ico');
end;


procedure TForm1.CzasTimer(Sender: TObject);
var FFTFata : TFFTData;
    dlugosc_pliku:integer;
    aktualny_stan:integer;

begin
dlugosc_pliku:=BASS_StreamGetFilePosition(Channel,BASS_FILEPOS_END);
aktualny_stan:=BASS_StreamGetFilePosition(Channel,BASS_FILEPOS_DECODE);

Postep.Position:=round(aktualny_stan/dlugosc_pliku*100);
Czas_gry.Caption:='pozostalo jeszcze ' + IntToStr(100-round(aktualny_stan/dlugosc_pliku*100)) + '%';

if BASS_ChannelIsActive(Channel) <> BASS_ACTIVE_PLAYING then
Exit;

BASS_ChannelGetData(Channel, @FFTFata, BASS_DATA_FFT1024);
Spectrum.Draw (Paint.Canvas.Handle, FFTFata, 16, -16);
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Bass_Free;
end;


procedure TForm1.GraClick(Sender: TObject);
begin
Channel := BASS_StreamCreateFile(FALSE, PChar(Otworz.FileName), 0, 0, 0);
BASS_ChannelPlay(Channel, False);
BASS_Start;
BASS_SetVolume(0);
if Bass_pause=true then
begin
BASS_SetVolume(ScrollBar1.Position);
BASS_Start;
end;
end;


procedure TForm1.StopClick(Sender: TObject);
begin
Channel := BASS_StreamCreateFile(FALSE, PChar(Otworz.FileName), 0, 0, 0);
BASS_ChannelStop(Channel);
BASS_Stop;
end;


procedure TForm1.ListaDblClick(Sender: TObject);
begin
if BASS_Start=true then
Bass_Stop;
Otworz.FileName:=Lista.Items.strings[Lista.itemindex];

if Otworz.FileName<>'' then
Channel := BASS_StreamCreateFile(FALSE, PChar(Lista.Items.strings[Lista.itemindex]), 0, 0, 0);
BASS_Start;
BASS_ChannelPlay(Channel, False);
Edit.Text:=ExtractFileName(Lista.Items.ValueFromIndex[Lista.ItemIndex]);
Form1.Caption:='FALON <<< '+ ExtractFileName(Lista.Items.ValueFromIndex[Lista.ItemIndex])+' >>>';
end;


procedure TForm1.ListaClick(Sender: TObject);
begin
Edit.Text:=ExtractFileName(Lista.Items.ValueFromIndex[Lista.itemindex]);
Otworz.FileName:=Lista.Items.Strings[Lista.itemindex];
end;


procedure TForm1.PauzaClick(Sender: TObject);
begin
Bass_Pause;
BASS_ChannelPause(Channel);
BASS_StreamGetFilePosition(Channel,BASS_FILEPOS_DECODE);
end;


procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
BASS_SetVolume(ScrollBar1.Position);
end;


procedure TForm1.ScrollBar2Change(Sender: TObject);
begin
BASS_ChannelSetAttributes(Channel,-1,-1,ScrollBar2.Position)
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1