Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2009, 00:12   #1
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию Воспроизведение всех треков в директории, bass.dll

Доброе время суток!
Подскажите пожалуйста, как проиграть по очереди все файлы в директории?
Пробовал сам разобраться, не вышло проигрывается только последний файл в списке!


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,bass;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  ECHBUFLEN = 1200;  
  FLABUFLEN = 350;   

var
  Form1: TForm1;
  floatable: DWORD; 
  chan: DWORD;     
  rotdsp: HDSP = 0; 
  rotpos: Single;    
  echdsp: HDSP = 0;  
  echbuf: array[0..ECHBUFLEN - 1,0..1] of Single;  
  echpos: Integer;  
  fladsp: HDSP = 0;  
  flabuf: array[0..FLABUFLEN - 1,0..1] of Single; 
  flapos: Integer;  
  flas, flasinc: Single;  
implementation

{$R *.dfm}
function fmod(a, b: Single): Single;
begin
  Result := a - (b * Trunc(a / b));
end;

procedure Rotate(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: DWORD); stdcall;
var
  a: DWORD;
  d: PSingle;
begin
  d := buffer;

  a := 0;
  while (a < (length div 4)) do
  begin
    d^ := d^ * Abs(Sin(rotpos));
    Inc(d);
    d^ := d^ * Abs(Cos(rotpos));

    rotpos := fmod(rotpos + 0.00003, Pi);

    Inc(d);
    a := a + 2;
  end;
end;

procedure Echo(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: DWORD); stdcall;
var
  a: DWORD;
  d: PSingle;
  l, r: Single;
begin
    d := buffer;

  a := 0;
  while (a < (length div 4)) do
  begin
    l := d^ + (echbuf[echpos,1] / 2);
    Inc(d);
    r := d^ + (echbuf[echpos,0] / 2);
    Dec(d);

    { Basic "bathroom" reverb }
    d^ := l;
    echbuf[echpos,0] := l;
    Inc(d);
    d^ := r;
    echbuf[echpos,1] := r;
        echpos := echpos + 1;
        if (echpos = ECHBUFLEN) then
      echpos := 0;

    Inc(d);
    a := a + 2;
  end;
end;

procedure Flange(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: DWORD); stdcall;
var
    a: DWORD;
    d: PSingle;
  f, s: Single;
  p1, p2: Integer;
begin
    d := buffer;

  a := 0;
  while (a < (length div 4)) do
  begin
    p1 := Trunc(flapos + flas) mod FLABUFLEN;
    p2 := (p1 + 1) mod FLABUFLEN;
    f := fmod(flas, 1);

    s := d^ + ((flabuf[p1, 0] * (1 - f)) + (flabuf[p2, 0] * f));
    flabuf[flapos, 0] := d^;
    d^ := s;

    Inc(d);
    s := d^ + ((flabuf[p1, 1] * (1 - f)) + (flabuf[p2, 1] * f));
    flabuf[flapos, 1] := d^;
    d^ := s;

    flapos := flapos + 1;
    if (flapos = FLABUFLEN) then
      flapos := 0;

    flas := flas + flasinc;
    if (flas < 0.0) or (flas > FLABUFLEN) then
      flasinc := -flasinc;

    Inc(d);
    a := a + 2;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  info: BASS_CHANNELINFO;
begin
    if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
    begin
        MessageBox(0,'An incorrect version of BASS.DLL was loaded',0,MB_ICONERROR);
        Halt;
    end;

  BASS_SetConfig(BASS_CONFIG_FLOATDSP, 1);
  if not BASS_Init(-1, 44100, 0, Handle, nil) then
  begin
    MessageBox(0, 'Can''t initialize device', 0, 0);
    Halt;
  end;

  floatable := BASS_StreamCreate(44100, 2, BASS_SAMPLE_FLOAT, nil, 0);
  if (floatable > 0) then
  begin
    BASS_StreamFree(floatable); 
    floatable := BASS_SAMPLE_FLOAT;
  end  ;

  BASS_MusicFree(chan);
  BASS_StreamFree(chan);

  chan := BASS_StreamCreateFile(False, PChar(ExtractFilePath(Application.ExeName)+'234.mp3'{Ghola.wav}), 0, 0, floatable or BASS_SAMPLE_LOOP);
  if (chan = 0) then
    chan := BASS_MusicLoad(False, PChar(ExtractFilePath(Application.ExeName)+'234.mp3'{Ghola.wav}), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_RAMPS or floatable, 0);
  if (chan = 0) then
  begin

    Exit;
  end;
BASS_ChannelGetInfo(chan, info);
  if (info.chans <> 2) then
  begin
BASS_MusicFree(chan);
    BASS_StreamFree(chan);
    Exit;
  end;
  BASS_ChannelPlay(chan, False);
end;


end.

Зарание благодарен!
С уважением Volkogriz!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 09.04.2009, 00:35   #2
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

чо такое bass.dll и как проиграть произвольный файл думаю ты знаешь (инфа в нете есть.. читай - нихачу)..
дальше делаем список файлов в папке (FindFirst, FindNext) и дальше проигрываем файлы по очереди со списка..
Код:
  chan := BASS_StreamCreateFile(False, PChar(ExtractFilePath(Application.ExeName)+'234.mp3'), 0, 0, floatable or BASS_SAMPLE_LOOP);
  if (chan = 0) then
    chan := BASS_MusicLoad(False, PChar(ExtractFilePath(Application.ExeName)+'234.mp3'), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_RAMPS or floatable, 0);
  if (chan = 0) then
а что это у нас за статическое имя 234.mp3.. когда оно должно меняться вроде бы..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"

Последний раз редактировалось Ntlegend; 09.04.2009 в 00:43.
Ntlegend вне форума Ответить с цитированием
Старый 09.04.2009, 01:05   #3
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Цитата:
Сообщение от Ntlegend Посмотреть сообщение
а что это у нас за статическое имя 234.mp3.. когда оно должно меняться вроде бы..
Да вы правы!
1 Я сканировал папку на файлы.
2 создал stringList
3 выделенный вами код выглядел так:
Код:
var
i:integer;
Files:TStringList;
begin
Files:= TStringList.Create;
Files.LoadFromFile(extractfilepath(application.exename)+'uni.log');
for i:=0 to Files.count-1 do
chan := BASS_StreamCreateFile(False, PChar(ExtractFilePath(Application.ExeName)+Files.Strings[i] ), 0, 0, floatable or BASS_SAMPLE_LOOP);
  if (chan = 0) then
    chan := BASS_MusicLoad(False, PChar(ExtractFilePath(Application.ExeName)+Files.Strings[i] ), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_RAMPS or floatable, 0);
  if (chan = 0) then
И проигрывается только последний трек (
Я просто понять не могу!!!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 09.04.2009, 01:11   #4
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

Цитата:
Сообщение от Volkogriz Посмотреть сообщение
Да вы правы!
Код:
var
i:integer;
Files:TStringList;
begin
Files:= TStringList.Create;
Files.LoadFromFile(extractfilepath(application.exename)+'uni.log');
for i:=0 to Files.count-1 do
chan := BASS_StreamCreateFile(False, PChar(ExtractFilePath(Application.ExeName)+Files.Strings[i] ), 0, 0, floatable or BASS_SAMPLE_LOOP);
  if (chan = 0) then
    chan := BASS_MusicLoad(False, PChar(ExtractFilePath(Application.ExeName)+Files.Strings[i] ), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_RAMPS or floatable, 0);
  if (chan = 0) then

а кто будет ставить задержку?? нада же подождать пока проиграется файл... и тока потом открывать следующий.. а Вы сразу все открыватете.. от оно и играло тока последний (после него уже нишо не открывается..)

там есть какоето событие.. генерится когда заканчивает играть файл. от нада его обрабатывать.. и открывать следующий по списку.. если достигли конца - то остановить это дело..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 15.07.2009, 13:16   #5
regman
Пользователь
 
Регистрация: 11.07.2009
Сообщений: 90
По умолчанию аналогичный трабл

<пост удалил....>
Apache/2.2.23 (Win32) PHP/5.3.18
Win7Pro 64
Vertrigo

Последний раз редактировалось regman; 15.07.2009 в 13:45.
regman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
bass.dll и mms потоки vismut Мультимедиа в Delphi 8 07.10.2011 19:01
bass.dll Elem Мультимедиа в Delphi 18 19.07.2009 11:04
Как мотать mp3 c Bass.dll Котовский Помощь студентам 1 24.01.2009 20:29
Помогите с параметрическим эквалайзером в BASS.DLL! N-DOGG Компоненты Delphi 2 04.01.2009 16:05
как соеденить dll bass blackstersl Общие вопросы Delphi 4 25.09.2008 17:52